如何有条件地增加新列值

时间:2014-11-10 12:39:41

标签: sql sql-server

我想生成条件增加值的新列。

假设我有以下演示数据:

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值。

1 个答案:

答案 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;

我们的想法是标记新列应该更改值的行。然后,只做这些标志的累积总和。