用于获取JIT spacetree数据的复杂sql查询
我需要为spacetree构建json字符串,如下所示:-用于获取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
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