3,494
社区成员




SQL> select a.id, a.fname, a.fparent, decode(b.fname,null,null,b.fname||'-') || a.fname
2 from t_money a
3 left join t_money b on a.fparent = b.id
4 ;
ID FNAME FPARENT DECODE(B.FNAME,NULL,NULL,B.FNA
---------- -------------------------------------------------------------------------------- ---------- --------------------------------------------------------------------------------
10103 欧元 101 现金-欧元
10102 美元 101 现金-美元
10101 人民币 101 现金-人民币
101 现金 现金
SQL>
SQL> select a.id, a.fname, a.fparent, b.fname || '-' || a.fname
2 from t_money a
3 left join t_money b on a.fparent = b.id
4 ;
ID FNAME FPARENT B.FNAME||'-'||A.FNAME
---------- -------------------------------------------------------------------------------- ---------- --------------------------------------------------------------------------------
10103 欧元 101 现金-欧元
10102 美元 101 现金-美元
10101 人民币 101 现金-人民币
101 现金 -现金
SQL>
SQL> select * from t_money;
ID FNAME FPARENT
---------- -------------------------------------------------------------------------------- ----------
101 现金
10101 人民币 101
10102 美元 101
10103 欧元 101
SQL>
SQL> select id,
2 fname,
3 fparent,
4 substr(sys_connect_by_path(a.fname, '-'), 2) fFullName
5 from t_money a
6 start with a.fparent is null
7 connect by prior id = fparent
8 ;
ID FNAME FPARENT FFULLNAME
---------- -------------------------------------------------------------------------------- ---------- --------------------------------------------------------------------------------
101 现金 现金
10101 人民币 101 现金-人民币
10102 美元 101 现金-美元
10103 欧元 101 现金-欧元
SQL>
WITH tab AS(
SELECT '101' id, '现金' FName ,NULL FParent FROM dual UNION ALL
SELECT '10101', '人民币', '101' FROM dual UNION ALL
SELECT '10102', '美元', '101' FROM dual UNION ALL
SELECT '10103', '欧元', '101' FROM dual
)
SELECT id,FName,FParent,
CASE WHEN
FParent IS NULL THEN FName
ELSE
(select FName FROM tab WHERE id=a.FParent )||'-'||a.FName
end fFullName
FROM tab a
ID FNAME FPARENT FFULLNAME
-------------------------------------------
101 现金 现金
10101 人民币 101 现金-人民币
10102 美元 101 现金-美元
10103 欧元 101 现金-欧元