Sql 在不同列值更改时标记列

Sql 在不同列值更改时标记列,sql,sql-server,tsql,Sql,Sql Server,Tsql,SQL Server 2014 我有一个查询,其中有一个名为“sitecode”的字段。我选择数据并按站点代码排序。我需要一个helper列,当站点代码更改时,who的值从1更改为0 例如: Helper SiteCode 1 A 1 A 1 A 0 B 1 C 1 C 0 D 0 D SQL表表示无序集。您需要一个列来指定顺序。如果您有一个,则lag()执行您想要的操作: select t.*,

SQL Server 2014

我有一个查询,其中有一个名为“sitecode”的字段。我选择数据并按站点代码排序。我需要一个helper列,当站点代码更改时,who的值从1更改为0

例如:

Helper  SiteCode
1       A
1       A
1       A
0       B
1       C
1       C
0       D
0       D
SQL表表示无序集。您需要一个列来指定顺序。如果您有一个,则
lag()
执行您想要的操作:

select t.*,
       (case when lag(sitecode) over (order by ?) <> sitecode then 0 else 1 end) as flag
from t;
选择t.*,
(当滞后(站点代码)超过(订购方?)站点代码时,则为0,否则为1结束)作为标志
从t;
用于指定排序的列。

SQL表表示无序集。您需要一个列来指定顺序。如果您有一个,则
lag()
执行您想要的操作:

select t.*,
       (case when lag(sitecode) over (order by ?) <> sitecode then 0 else 1 end) as flag
from t;
选择t.*,
(当滞后(站点代码)超过(订购方?)站点代码时,则为0,否则为1结束)作为标志
从t;

用于指定排序的列。

您可以使用
densite\u rank()
为每个
sitecode
获取一个连续数字,并计算模2以获得交替的1和0

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

您可以使用
densite\u rank()
为每个
sitecode
获取一个连续的数字,并计算模2以获得交替的1和0

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

这是在Excel中输入用于条带格式的“帮助器列”所必需的。这是在Excel中输入用于条带格式的“帮助器列”所必需的。谢谢你,我不熟悉lag,我需要学习如何使用它。感谢这个例子。谢谢你,我不熟悉lag,我需要学习如何使用它。欣赏这个例子。