【发布时间】:2019-06-24 01:23:21
【问题描述】:
Max_ID Second_Max_ID Cumulative_ID
173 97 ,97
174 173 ,97,173
... ... ...
我需要编写一个查询来计算累积 ID。有人可以帮忙吗? 这是一个具有 3 列(Max_ID、Second_Max_ID、Cumulative_ID)的临时表,其中我在表中只有 Max_ID 和 Second_Max_ID 值,我需要为同一个临时表中的每一行计算 Cumulative_ID。
我使用了shnugo提供的查询,修改了如下查询-
DECLARE @mockup TABLE(Max_ID INT,Second_Max_ID INT);
INSERT INTO @mockup VALUES
(173 , 97 )
,(174 , 173 );
WITH recCTE AS
(
SELECT Max_ID
,Second_Max_ID
,CAST(Second_Max_ID AS VARCHAR(MAX)) AS Cumulative_ID
FROM @mockup --WHERE Second_Max_ID IS NULL
UNION ALL
SELECT m.Max_ID
,m.Second_Max_ID
,r.Cumulative_ID+','+ cast(m.Second_Max_ID as varchar(max))
FROM @mockup m
INNER JOIN recCTE r ON r.Max_ID=m.Second_Max_ID
)
SELECT * FROM recCTE;
现在得到的结果像 -
Max_ID Second_Max_ID Cumulative_ID
173 97 97
174 173 173
174 173 97,173
如何从上面的结果中删除第二行?
【问题讨论】:
-
不足以让我关闭为 100% 重复,但您仍然需要 this methodology 或类似的东西。您需要稍微更改连接子句。假设您有一个迭代值的主键
-
一个
Max_ID下面总是只有一个关注者吗?它是1:1列表、1:n还是m:n层次结构? -
@Shnugo 这是一个动作序列,您可以说出任何记录上第一个动作发生的位置,该 ID 为 97,然后发生第二个动作,该 ID 为 173,然后是第三个,依此类推。现在我需要显示审计,如 97>173>174
标签: sql-server tsql sql-server-2008 sql-server-2012 ssms