用于获取JIT spacetree数据的复杂sql查询

用于获取JIT spacetree数据的复杂sql查询,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我需要为spacetree构建json字符串,如下所示:- WITH CustomerTree AS ( SELECT ParentID ,CustomerID ,0 AS Level FROM BinaryTree WHERE ParentID = 2 UNION ALL SELECT BinaryTree.ParentID ,BinaryTree.CustomerID ,Cu

我需要为spacetree构建json字符串,如下所示:-

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
目前我正在使用以下查询:-

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
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
返回的结果如下:-

ParentID   CustomerID  firstname
     2      100176         Bill
     2      115468        will
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
这里的意思是2是树的根元素,100176115468是子元素。 但是这些子节点100176和115468也有一些子节点,这意味着它们是其他一些子节点的根/父节点。表示查询将是:-

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
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
和100176的结果:-

 ParentID   CustomerID  firstname
   100176    100222       J
   100176    348645       K
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

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
结果为115468:-

 ParentID   CustomerID  firstname
  115468     154756       D
  115468     348480       L
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
但我需要一个查询中的所有家长和孩子,如:-

 ParentID   CustomerID  firstname
    2        100176       Bill
    2        115468       will
  100176     100222       J
  100176     348645       K
  115468     154756       D
  115468     348480       L
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
100176和115468的子节点也可以有子节点,因此这些子节点也应该是上述结果中100222348645的结果

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
有人能帮我吗

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
提前谢谢

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