在SQL Server 2005中得到这张表,用于维护合并操作的历史记录:
- 列 FROM_ID(整数)
- 列 TO_ID(整数)
现在我需要一个查询,该查询将原始 FROM_ID 作为输入,并返回最后一个可用的 TO_ID。
例如:
- ID 1 合并到 ID 2
- 随后,ID 2 合并到 ID 3
- 稍后,ID 3 再次合并到 ID 4
因此,我尝试组合的查询将采用 ID 1(在我假设的 WHERE 子句中)作为输入,并且应该为我提供最后一个可用的 TO_ID 作为结果,在本例中为 4。
我想我需要一些递归逻辑,但真的不知道如何开始。
Thanks !
Mathieu
Using a CTE http://msdn.microsoft.com/en-us/library/ms190766.aspx会工作。
测试脚本
DECLARE @IDs TABLE (
FromID INTEGER
, ToID INTEGER
)
INSERT INTO @IDs
SELECT 1, 2
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 4
SQL语句
;WITH q AS (
SELECT FromID, ToID
FROM @IDs
UNION ALL
SELECT q.FromID, u.ToID
FROM q
INNER JOIN @IDs u ON u.FromID = q.ToID
)
SELECT FromID, MAX(ToID)
FROM q
WHERE FromID = 1
GROUP BY
FromID
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)