没有循环的梯形记录选择

时间:2013-06-28 08:39:01

标签: sql sql-server sql-server-2008-r2

我有一个这样的表,A和B作为列:

A    B
1    0
2    1
3    2
4    3

可以通过定义A的值来选择记录。如果所选行具有B的值,则还必须选择A的值等于记录B的行,如果所选记录具有B,则必须再次选择等等。

实施例: 如果用户查询A = 3,则返回的行必须为:

A    B
3    2
2    1
1    0

由于这种情况,这是输出:A3的值为B;有一条记录的A等于第一行的B 2而第二条记录的B1,但仍有匹配的记录。

有没有办法可以在不循环记录的情况下完成这项工作?

1 个答案:

答案 0 :(得分:2)

您可以使用递归CTE来实现此目的:

http://msdn.microsoft.com/en-us/library/ms186243(v=sql.105).aspx

;WITH RCTE AS 
(
    SELECT * FROM Table1 WHERE A = 3
    UNION ALL
    SELECT t.* FROM RCTE r
    INNER JOIN Table1 t ON r.B = t.A
)
SELECT * FROM RCTE

<强> SQLFiddle DEMO