說明:將多行(包含父子關係)樹狀查詢結果符合條件的父子關係記錄按照符號進行等級層次拼接組成每行結果;其中包含兩種SQLServer和Oracle數據庫的查詢方式,僅供參考,目前正在學習中,當中有語法不規範處請勿對號入座。
1. 【SQLServer】"樹查詢"拼接語句如下:
With SubQuery (upmaterialnumber,qty,subPartNo,SumDrawingNumber) AS
(Select
R.upmaterialnumber,
R.qty, R.materialnumber as subPartNo,
C.SumDrawingNumber as SumDrawingNumber
From ERP_D_MeterialRelation R,ERP_D_BillOfMaterial C
Where R.materialnumber = '6A100045'
And R.materialnumber = C.number
Union All
Select
A1.upmaterialnumber,
A1.qty,A1.subPartNo,
B1.SumDrawingNumber
From ERP_D_BillOfMaterial B1,
(Select
A.upmaterialnumber,
A.qty,
A.materialnumber as subPartNo
From ERP_D_MeterialRelation A
Left Join SubQuery B ON A.upmaterialnumber = B.subPartNo) A1
Where A1.subPartNo = B1.Number)
Select * From SubQuery
2. 【Oracle】"樹查詢"拼接語句如下:
Select
c.roleName as roleName,
c.menuName as menuName,
convert(varchar(5000),c.funName) as funName
From (
Select
roleName,
(Select name as menuName From t_scl_func where code = supCode) as menuName,
funName = (stuff((
Select ',' b.funname
From (
Select
r.name as rolename,
m.name as funname,
m.code as code,
m.parent as supCode
From
t_scl_role r,
t_scl_role_func f,
t_scl_func m
Where r.id = f.role_id
And f.func_code = m.code ) b
Where b.rolename = a.rolename
And b.supCode = a.supCode for xml path('')),1,1,''))
From (
Select
r.name as rolename,
m.name as funname,
m.code as code,
m.parent as supCode
From
t_scl_role r,
t_scl_role_func f,
t_scl_func m
Where r.id = f.role_id
And f.func_code = m.code ) a
Group by rolename,supCode) c
Where c.funname is Not Null Order by c.roleName;