SQL实现:为数据表重复行添加标识,首行及唯一行标1其余标0
实现重复行标记FLAG的SQL方案
嘿,这个需求用窗口函数完全能搞定,你提到的row_number()思路非常准确,我来给你具体实现方案:
原始数据
COL1 COL2 A X A Y A Z B W B W C L C L
实现逻辑与SQL代码
我们可以通过ROW_NUMBER()窗口函数按COL1和COL2的组合分组,给每组内的行生成序号,再通过CASE语句判断序号是否为1来标记FLAG:
SELECT COL1, COL2, CASE WHEN ROW_NUMBER() OVER(PARTITION BY COL1, COL2 ORDER BY (SELECT NULL)) = 1 THEN 1 ELSE 0 END AS FLAG FROM your_table_name;
代码解释:
PARTITION BY COL1, COL2:将数据按COL1和COL2的唯一组合分组,每个组合就是一个独立的窗口ROW_NUMBER() OVER(...):在每个分组内生成从1开始的连续行号ORDER BY (SELECT NULL):如果不需要指定特定的排序规则(只要标记首次出现的行即可),用这个可以避免部分数据库要求必须指定排序字段的问题(如果你的数据库支持窗口函数不写ORDER BY,也可以省略这部分)CASE语句:判断行号是否为1,是则返回1(唯一行或首次出现的重复行),否则返回0(非首次出现的重复行)
预期输出
| COL1 | COL2 | FLAG | 说明 |
|---|---|---|---|
| A | X | 1 | 唯一行 |
| A | Y | 1 | 唯一行 |
| A | Z | 1 | 唯一行 |
| B | W | 1 | 重复组合首次出现 |
| B | W | 0 | 重复组合非首次出现 |
| C | L | 1 | 重复组合首次出现 |
| C | L | 0 | 重复组合非首次出现 |
内容的提问来源于stack exchange,提问作者muruli ss
相关产品推荐
相关产品推荐

