我想生成条件增加值的新列。
假设我有以下演示数据:
SubjID dstart dstop primarykey
1 1 4 1
1 5 15 2
1 16 25 3
1 26 35 4
2 1 4 5
2 5 15 6
2 16 25 7
2 26 35 8
现在我想要结果如下:
SubjID dstart dstop primarykey NewCol
1 1 4 1 1
1 5 15 2 1
1 16 25 3 1
1 26 35 4 1
2 36 40 5 2
2 5 15 6 3
2 16 25 7 3
2 26 35 8 3
所以我想生成具有以下条件的新列:
如果以下任何条件为false,则仅增加新列级别
1)当前行的dstart值与前一行的dstop值之间的差值不是1
2)当前行的主题ID与前一行的主题不同
检查我的预期输出中需要由查询生成的NewcCol值。
答案 0 :(得分:2)
您可以使用窗口功能执行所需操作。以下版本使用累积总和,可在SQL Server 2012 +中使用;
select SubjID, dstart, dstop, primarykey,
sum(case when dstart <> prevdstop + 1 or prevSubjId is null then 1 else 0 end) over
(order by primarykey) as newcol
from (select t.*,
lag(dstop) over (partition by subjId order by primarykey) as prevdstop,
lag(subjId) over (partition by subjId order by primarykey) as prevSubjId
from table t;
我们的想法是标记新列应该更改值的行。然后,只做这些标志的累积总和。