Files
GateDge2023_ljy/01.扩展/HandleUtils/sql/递归统计.sql

40 lines
874 B
MySQL
Raw Normal View History

2024-07-16 10:33:50 +08:00
WITH result (Id, ParentId, Category, Num)
AS
(
SELECT 1, 0, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1', 0
UNION ALL
SELECT 2, 1, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-1',10
UNION ALL
SELECT 3, 1, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-2', 10
UNION ALL
SELECT 4, 3, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-2-1', 5
UNION ALL
SELECT 5, 0, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2', 5
UNION ALL
SELECT 6, 0, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3', 5
UNION ALL
SELECT 7, 6, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3-1', 5
UNION ALL
SELECT 8, 4, '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-2-1-1', 5
),
CTE(Id, ParentId, Category, Path, Num)
As
(
SELECT A.Id, A.ParentId, A.Category, CAST(A.Id As VARCHAR(MAX))+'->',A.Num
FROM result A
WHERE A.ParentId = 0
UNION ALL
SELECT B.Id, B.ParentId, B.Category,C.Path+CAST(B.Id As VARCHAR(MAX)) + '->', B.Num
FROM result B
INNER JOIN CTE c on C.Id = B.ParentId
)
--SELECT * FROM CTE
SELECT C.Id,
C.Category,
SUM(C1.Num) AS Num
FROM CTE AS C
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD>ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CHARINDEX
INNER JOIN CTE AS C1 ON CHARINDEX(C.Path, C1.Path) = 1
GROUP BY C.ID,C.Category