SQL Server查询如何避免重复月份行 优先选带sum1/sum2/sum3值的行
SQL Server 重复月份行筛选解决方案
核心逻辑通过窗口函数给同月份行按规则分配优先级,取每个月优先级最高的行即可,实现代码如下:
WITH month_ranked AS ( SELECT *, ROW_NUMBER() OVER ( -- 按月份分组,跨多年数据需额外加上年份字段分组 PARTITION BY [你的月份字段名] ORDER BY -- 只要sum1/sum2/sum3任意一个非空,优先级高于全空行 CASE WHEN COALESCE(sum1, sum2, sum3) IS NOT NULL THEN 1 ELSE 2 END ASC -- 同月份有多条非空行时可在这里补充排序规则,比如 ORDER BY 录入时间 DESC ) AS rank_num FROM [你的原始表/子查询结果] ) SELECT * -- 按需筛选字段,可排除rank_num列 FROM month_ranked WHERE rank_num = 1
注意事项
- 若同月份存在多条带非空sum值的行,可以在
ORDER BY后追加自定义排序规则,指定优先保留的行 - 如果数据覆盖多个年份,需要在
PARTITION BY中同时添加年份字段,避免不同年份的同月份数据被错误合并 COALESCE函数会依次判断入参字段是否为非空,只要有一个字段有值就返回非空结果,完全匹配你的筛选规则
内容的提问来源于stack exchange,提问作者Walerius
相关产品推荐
相关产品推荐

