我找到位于一个非常有用的文章: Simplest way to do a recursive self-join in SQL Server?琛对递归型自加入
在这个例子中假设有一个叫存储,看起来像这样的整数“数量”的另一列:
PersonID | Initials | ParentID | Quantity
1 CJ NULL 1
2 EB 1 2
3 MB 1 1
4 SW 2 1
5 YT NULL 1
6 IS 5 1
如果我要求CJ的层次,这将是
PersonID | Initials | ParentID | Quantity | HasSubordinate
1 CJ NULL 2 1
2 EB 1 1 1
3 MB 1 1 1
4 SW 2 1 0
列HasSubordinate指定层次结构中的最后一个个体。我想显示层次结构中最后一个人,并将每个前面的行的数量相乘。在这种情况下,数量将是2(2 x 1 x 1 x 1 = 2)。
PersonID | Initials | ParentID | Quantity | HasSubordinate
4 SW 2 2 0
我的代码:
WITH q AS
(
SELECT *
FROM mytable
WHERE PersonID = 1
UNION ALL
SELECT m.*
FROM mytable m
JOIN q
ON m.parentID = q.PersonID
)
SELECT *
FROM q
WHERE HasSubordinate = 0
任何帮助是极大的赞赏!
太棒了!这正是我正在寻找的东西,但由于某种原因无法想出它。只是一个说明,有一个初始错误抱怨不兼容的类型,所以我不得不硬编码数量作为一个小数。感谢您的帮助!! – user2572833 2015-02-23 18:56:51
我不认为这是正确的答案。例如,如果您将数量从1更改为2,则应该得到2 * 2 * 2 * 2 = 16,但此查询将返回8 – 2015-02-23 19:25:37
@GiorgiNakeuri同意,因此我在回答底部的注释中,我正在考虑替代方法但在被接受之后让它一个人待着。 – 2015-02-23 20:05:05