标记列以指示其他列值更改的时间

时间:2018-08-07 21:32:59

标签: sql sql-server tsql

SQL Server 2014。

我有一个查询,该查询具有一个名为“ sitecode”的字段。我选择数据并按站点代码排序。我需要一个帮助者列,只要站点代码更改,其值就会从1变为0。

如:

Helper  SiteCode
1       A
1       A
1       A
0       B
1       C
1       C
0       D
0       D

2 个答案:

答案 0 :(得分:3)

SQL表表示无序集。您需要一列来指定顺序。如果您有一个,那么lag()会做您想要的事情:

select t.*,
       (case when lag(sitecode) over (order by ?) <> sitecode then 0 else 1 end) as flag
from t;

?用于指定顺序的列。

答案 1 :(得分:1)

您可以使用dense_rank()获得每个sitecode的连续数字,并计算模2以获得交替的1和0。

SELECT sitecode,
       dense_rank() OVER (ORDER BY sitecode) % 2 helper
       FROM elbat;

db<>fiddle