SQL 服务器:仅标记第一个重复行

SQL Server: Flag only First duplicate row

我只想标记下面显示的数据集中第一个重复的 ID-VL 组合。 FirstOccurence 列是我想要的最终结果。

ID  VL  FirstOccurence
1   a   1
1   b   1
2   a   1
2   a   0
3   a   1
3   a   0
4   a   1
4   a   0
5   a   1
5   b   1
5   a   0

目前在原始 table 中没有可用的唯一索引。 有没有办法用 LAG 功能来做到这一点?我在网上找不到任何导致重复标记的示例。非常感谢任何建议!

亲切的问候, 伊戈尔

一种方法是使用 ROW_NUMBER()CASE 表达式:

SELECT
     ID
    ,VL
    ,CASE ROW_NUMBER() OVER(PARTITION BY ID, VL ORDER BY ID, VL) WHEN 1 THEN 1 ELSE 0 END AS FirstOccurance
FROM dbo.example
ORDER BY
     ID
    ,VL
    ,FirstOccurance;

结果:

+----+----+----------------+
| ID | VL | FirstOccurance |
+----+----+----------------+
|  1 | a  |              1 |
|  1 | b  |              1 |
|  2 | a  |              0 |
|  2 | a  |              1 |
|  3 | a  |              0 |
|  3 | a  |              1 |
|  4 | a  |              0 |
|  4 | a  |              1 |
|  5 | a  |              0 |
|  5 | a  |              1 |
|  5 | b  |              1 |
+----+----+----------------+

请注意,此结果顺序与您的最终结果不同。如果 table 中有一列或多列提供与您提问的结果相同的顺序,请改为在 ORDER BY 子句中指定。