【发布时间】:2014-06-11 23:25:54
【问题描述】:
SQL Server 中的表具有多代父子引用的映射。
我必须达到结果:
Level No || Child Count
所以,我有以下查询:
SELECT
'L1' LEVEL, COUNT(ChildRef) CHILD
FROM
[dbo].[TOMatriX]
WHERE
ParentRef = 1
UNION ALL
SELECT
'L2' LEVEL, COUNT(ChildRef) CHILD
FROM
[dbo].[TOMatriX]
WHERE
ParentRef IN (SELECT ChildRef FROM [dbo].[TOMatriX] WHERE ParentRef = 1)
UNION ALL
SELECT
'L3' LEVEL, COUNT(ChildRef) CHILD
FROM
[dbo].[TOMatriX]
WHERE
ParentRef IN (SELECT ChildRef FROM [dbo].[TOMatriX]
WHERE ParentRef IN (SELECT ChildRef FROM [dbo].[TOMatriX]
WHERE ParentRef = 1)
)
UNION ALL
SELECT
'L4' LEVEL, COUNT(ChildRef) CHILD
FROM
[dbo].[TOMatriX]
WHERE
ParentRef IN (SELECT ChildRef FROM [dbo].[TOMatriX]
WHERE ParentRef IN (SELECT ChildRef FROM [dbo].[TOMatriX]
WHERE ParentRef IN (SELECT ChildRef
FROM [dbo].[TOMatriX]
WHERE ParentRef = 1)
)
)
如何使这个查询动态而不是像这样硬编码,因为级别也可以超过 4。
如何使用Common Table Expressions 或其中的任何递归?
【问题讨论】:
-
这是递归 cte 的典型用法。我建议你看看这里blog.sqlauthority.com/2008/07/28/… 或这里stackoverflow.com/questions/14274942/…,尝试应用你学到的东西,然后如果它成功了,我们可以帮助你做对;不太管用。
标签: sql sql-server sql-server-2008 recursion recursive-query