2013-10-30 70 views
0

我需要建立JSON字符串的spacetree像下面的JIT spacetree数据: - http://philogb.github.io/jit/static/v20/Jit/Examples/Spacetree/example2.code.html复杂的SQL查询来获取

目前我使用下面的查询: -

SELECT BT.ParentID,BT.CustomerID,CU.firstname 
from BinaryTree BT INNER JOIN Customers CU on BT.CustomerID=CU.CustomerID 
WHERE [ParentID] = 2 
ORDER BY BT.ParentID,BT.CustomerID 

这是返回结果如下: - 在这里

ParentID CustomerID firstname 
    2  100176   Bill 
    2  115468  will 

装置2是树的根元素和100176,115468的子元素。 但是,这些子节点100176和115468也有一些子节点,这意味着这些是其他一些子节点的root/parentnode。意味着查询是: -

SELECT BT.ParentID,BT.CustomerID,CU.firstname 
from BinaryTree BT INNER JOIN Customers CU on BT.CustomerID=CU.CustomerID 
WHERE [ParentID] = 100176 
ORDER BY BT.ParentID,BT.CustomerID 

,并导致了100176: -

ParentID CustomerID firstname 
    100176 100222  J 
    100176 348645  K 

SELECT BT.ParentID,BT.CustomerID,CU.firstname 
from BinaryTree BT INNER JOIN Customers CU on BT.CustomerID=CU.CustomerID 
WHERE [ParentID] = 115468   
ORDER BY BT.ParentID,BT.CustomerID 

,并导致了115468: -

ParentID CustomerID firstname 
    115468  154756  D 
    115468  348480  L 

但我需要所有的父母和孩子在一个查询如: -

ParentID CustomerID firstname 
    2  100176  Bill 
    2  115468  will 
    100176  100222  J 
    100176  348645  K 
    115468  154756  D 
    115468  348480  L 

100176和115468的孩子也可以有子节点,所以这些也应该是100222,348645的结果。

任何机构可以帮助我吗?

在此先感谢

回答

1
WITH CustomerTree AS (
    SELECT ParentID 
      ,CustomerID 
      ,0 AS Level 
    FROM BinaryTree 
    WHERE ParentID = 2 
    UNION ALL 
    SELECT BinaryTree.ParentID 
      ,BinaryTree.CustomerID 
      ,CustomerTree.Level + 1 AS Level 
    FROM BinaryTree 
     INNER JOIN CustomerTree 
      ON BinaryTree.ParentID = CustomerTree.CustomerID 
) 
SELECT CustomerTree.ParentID 
     ,CustomerTree.CustomerId 
     ,Customers.FirstName 
FROM CustomerTree 
    INNER JOIN Customers 
     ON CustomerTree.CustomerID = Customers.CustomerID 
+0

真棒,谢谢@adrianm,其做工精细:-) – AnandMeena