You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询如何实现Row列按年份分组,同一年同分组行号一致

问题原因

你当前的SQL存在两点问题:

  • 将YEAR(o3.DocDate)加入了PARTITION BY,意味着同一年、相同CardCode、相同ItmsGrpNam的记录会被分到同一个独立计算分区
  • 使用ROW_NUMBER()窗口函数时,即便分区内所有记录排序值一致,也会生成不重复的递增编号,因此同一年的两条记录会得到1、2两个不同行号

调整方案

将YEAR(DocDate)从分区条件移动到排序条件,同时将ROW_NUMBER()替换为DENSE_RANK(),即可实现同一年份相同维度的记录行号一致、不同年份行号按时间递增的效果:

SELECT 
    DENSE_RANK() OVER (
        PARTITION BY o3.CardCode, o3.ItmsGrpNam 
        ORDER BY YEAR(o3.DocDate)
    ) AS [Row],
    o3.DocDate, 
    o3.CardCode, 
    o3.ItmsGrpNam
FROM OINV o3

效果验证

执行上述语句后,相同CardCode、ItmsGrpNam分组下:

  • 2019年的所有对应记录行号均为1
  • 2021年的所有对应记录行号均为2
    和你预期的输出完全一致。

内容的提问来源于stack exchange,提问作者Vigna Hari Karthik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:18:03