40 lines
874 B
MySQL
40 lines
874 B
MySQL
|
|
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
|