当前位置: 代码迷 >> Sql Server >> 二叉树结构查询sql。
  详细解决方案

二叉树结构查询sql。

热度:14   发布时间:2016-04-24 09:00:39.0
求一个二叉树结构查询sql。。

查询结果:
这个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]
  相关解决方案