SQL Server中如何按Code-Prod分组为表新增Flag标识列
SQL Server 按分组首行规则新增Flag列实现方法
实现逻辑
按照需求,按Code+Prod组合分组,组内按Id升序排序,每组第一条记录Flag设为0,其余记录设为1,使用窗口函数ROW_NUMBER()可以快速实现分组排序编号,结合可更新CTE即可直接完成列赋值。
操作步骤
- 第一步:给目标表新增
Flag字段
-- 请将YourTable替换为你的实际表名 ALTER TABLE YourTable ADD Flag INT NOT NULL DEFAULT(0);
- 第二步:执行更新语句给Flag赋值
WITH GroupSort AS ( SELECT Flag, ROW_NUMBER() OVER (PARTITION BY Code, Prod ORDER BY Id) AS GroupRowId FROM YourTable ) UPDATE GroupSort SET Flag = CASE WHEN GroupRowId = 1 THEN 0 ELSE 1 END;
可选:查询时动态计算Flag(无需修改表结构)
如果不需要持久化存储Flag值,只需要查询时返回对应结果,可以直接用以下语句,不需要执行加列和更新操作:
SELECT Id, Code, Prod, CASE WHEN ROW_NUMBER() OVER (PARTITION BY Code, Prod ORDER BY Id) = 1 THEN 0 ELSE 1 END AS Flag FROM YourTable ORDER BY Id
执行以上语句返回的结果和给出的预期示例完全匹配。
内容的提问来源于stack exchange,提问作者Fernando Quintino
相关产品推荐
相关产品推荐

