大家好,我用的是SQL2005,我想利用CTE分层汇总金额,具体的表如下我运行以下语句--列出项目的层次名称
DECLARE @i INT,@amount float
SELECT @i=23;WITH Co_ItemNameSet_CTE(pi_sId, pi_id,parent_id, pi_Name,amount,Level)
AS
(
SELECT pi_sId, pi_id,Parent_id, pi_name ,amount,1 AS [Level]
FROM PAY_PI
WHERE pi_sid=@i
UNION ALL
SELECT c.pi_sId,c.pi_id,c.Parent_id, c.pi_Name,c.amount,[Level] + 1
FROM PAY_PI c INNER JOIN Co_ItemNameSet_CTE ct
ON c.Parent_id=ct.pi_sId)SELECT * FROM Co_ItemNameSet_CTE order by pi_id
go结果sid id parentid 名称 金额 level23 ZH317.FB.03 10 专线工程施工 0 1
28 ZH317.FB.03.01 23 线路本体工程 0 2
30 ZH317.FB.03.01.01 28 装置性材料 0 3
76 ZH317.FB.03.01.01.01 30 砼杆 0 4
83 ZH317.FB.03.01.01.01.01 76 9米等径上段 4.02 5
84 ZH317.FB.03.01.01.01.02 76 9米等径下段 4.02 5
85 ZH317.FB.03.01.01.01.03 76 9米等径上段 18.09 5
86 ZH317.FB.03.01.01.01.04 76 9米等径下段 18.09 5
77 ZH317.FB.03.01.01.02 30 砼预制品 0 4
88 ZH317.FB.03.01.01.02.01 77 底盘 22.11 5
89 ZH317.FB.03.01.01.02.02 77 拉盘 175.88 5
90 ZH317.FB.03.01.01.02.03 77 拉盘 8.04 5
91 ZH317.FB.03.01.01.02.04 77 拉盘 197.99 5
92 ZH317.FB.03.01.01.02.05 77 砼墩 11.06 5
96 ZH317.FB.03.01.01.02.06 77 砼墩 4.02 5
97 ZH317.FB.03.01.01.02.07 77 砼墩 40.2 5
78 ZH317.FB.03.01.01.03 30 线材 0 4
98 ZH317.FB.03.01.01.03.01 78 导线 1509 5
103 ZH317.FB.03.01.01.03.02 78 导线 11267.2 5
104 ZH317.FB.03.01.01.03.03 78 钢绞线 2336.99 5
105 ZH317.FB.03.01.01.03.04 78 钢绞线 2495.94 5
106 ZH317.FB.03.01.01.03.05 78 钢绞线 2707.08 5
79 ZH317.FB.03.01.01.04 30 金具、电瓷 0 4
107 ZH317.FB.03.01.01.04.01 79 复合绝缘子 57.29 5
108 ZH317.FB.03.01.01.04.02 79 复合绝缘子 232.16 5
109 ZH317.FB.03.01.01.04.03 79 瓷横担 46.92 5
110 ZH317.FB.03.01.01.04.04 79 地线吊架 3.03 5
111 ZH317.FB.03.01.01.04.05 79 耐张线夹 224.22 5
112 ZH317.FB.03.01.01.04.06 79 悬垂线夹 3.03 5
120 ZH317.FB.03.01.01.04.10 79 悬垂线夹 54.54 5
121 ZH317.FB.03.01.01.04.11 79 悬垂线夹 10.1 5
122 ZH317.FB.03.01.01.04.12 79 单联碗头 281.79 5如何利用CTE,让金额栏层层汇总。
DECLARE @i INT,@amount float
SELECT @i=23;WITH Co_ItemNameSet_CTE(pi_sId, pi_id,parent_id, pi_Name,amount,Level)
AS
(
SELECT pi_sId, pi_id,Parent_id, pi_name ,amount,1 AS [Level]
FROM PAY_PI
WHERE pi_sid=@i
UNION ALL
SELECT c.pi_sId,c.pi_id,c.Parent_id, c.pi_Name,c.amount,[Level] + 1
FROM PAY_PI c INNER JOIN Co_ItemNameSet_CTE ct
ON c.Parent_id=ct.pi_sId)SELECT * FROM Co_ItemNameSet_CTE order by pi_id
go结果sid id parentid 名称 金额 level23 ZH317.FB.03 10 专线工程施工 0 1
28 ZH317.FB.03.01 23 线路本体工程 0 2
30 ZH317.FB.03.01.01 28 装置性材料 0 3
76 ZH317.FB.03.01.01.01 30 砼杆 0 4
83 ZH317.FB.03.01.01.01.01 76 9米等径上段 4.02 5
84 ZH317.FB.03.01.01.01.02 76 9米等径下段 4.02 5
85 ZH317.FB.03.01.01.01.03 76 9米等径上段 18.09 5
86 ZH317.FB.03.01.01.01.04 76 9米等径下段 18.09 5
77 ZH317.FB.03.01.01.02 30 砼预制品 0 4
88 ZH317.FB.03.01.01.02.01 77 底盘 22.11 5
89 ZH317.FB.03.01.01.02.02 77 拉盘 175.88 5
90 ZH317.FB.03.01.01.02.03 77 拉盘 8.04 5
91 ZH317.FB.03.01.01.02.04 77 拉盘 197.99 5
92 ZH317.FB.03.01.01.02.05 77 砼墩 11.06 5
96 ZH317.FB.03.01.01.02.06 77 砼墩 4.02 5
97 ZH317.FB.03.01.01.02.07 77 砼墩 40.2 5
78 ZH317.FB.03.01.01.03 30 线材 0 4
98 ZH317.FB.03.01.01.03.01 78 导线 1509 5
103 ZH317.FB.03.01.01.03.02 78 导线 11267.2 5
104 ZH317.FB.03.01.01.03.03 78 钢绞线 2336.99 5
105 ZH317.FB.03.01.01.03.04 78 钢绞线 2495.94 5
106 ZH317.FB.03.01.01.03.05 78 钢绞线 2707.08 5
79 ZH317.FB.03.01.01.04 30 金具、电瓷 0 4
107 ZH317.FB.03.01.01.04.01 79 复合绝缘子 57.29 5
108 ZH317.FB.03.01.01.04.02 79 复合绝缘子 232.16 5
109 ZH317.FB.03.01.01.04.03 79 瓷横担 46.92 5
110 ZH317.FB.03.01.01.04.04 79 地线吊架 3.03 5
111 ZH317.FB.03.01.01.04.05 79 耐张线夹 224.22 5
112 ZH317.FB.03.01.01.04.06 79 悬垂线夹 3.03 5
120 ZH317.FB.03.01.01.04.10 79 悬垂线夹 54.54 5
121 ZH317.FB.03.01.01.04.11 79 悬垂线夹 10.1 5
122 ZH317.FB.03.01.01.04.12 79 单联碗头 281.79 5如何利用CTE,让金额栏层层汇总。
select sum(amount) from Co_ItemNameSet_CTE group by pi_id