2013-10-30 71 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