
查询结果:
这个left和right是下属个数
NAME LEFT RIGHT
A 3 3
B 1 1
C 1 1
D 0 0
E 0 0
F 0 0
G 0 0
数据库表结构:
NAME LEFT RIGHT PNAME
A B C ROOT
B D E A
C F G A
D B
E B
F C
G C
请问下可以实现么,这个树是没下限的
------解决思路----------------------
;WITH CTE AS(
SELECT [NAME],[LEFT],[RIGHT]
,CAST([NAME]+'-' AS VARCHAR(8000))[PATH]
FROM TB
WHERE [PNAME]='ROOT'
UNION ALL
SELECT T1.[NAME],T1.[LEFT],T1.[RIGHT]
,T2.[PATH]+T1.[NAME]+'-'
FROM TB T1
JOIN CTE T2 ON T1.[PNAME]=T2.[NAME]
)
SELECT T3.[NAME]
,T3.LC [LEFT]
,T4.RC [RIGHT]
FROM(
SELECT T1.[NAME],COUNT(T2.[NAME])LC
FROM CTE T1 LEFT JOIN CTE T2
ON T2.[PATH]LIKE T1.[PATH]+ISNULL(T1.[LEFT],'-')+'-%'
GROUP BY T1.[NAME]
)T3 JOIN(
SELECT T1.[NAME],COUNT(T2.[NAME])RC
FROM CTE T1 LEFT JOIN CTE T2
ON T2.[PATH]LIKE T1.[PATH]+ISNULL(T1.[RIGHT],'-')+'-%'
GROUP BY T1.[NAME]
)T4 ON T3.[NAME]=T4.[NAME]