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

能否修改ROW_NUMBER()取值逻辑生成带后缀的ProductID?

可以实现该需求,以下是解决方案

首先你当前的SQL存在语法错误,ProductID = ProductID = ROW_NUMBER() OVER (...) 的赋值方式不正确,这会导致你得到的不是预期的分组行号。以下是修正后的实现方案:

实现思路

  1. 先按原始ProductID分组,为每组内的记录生成从1开始的行号,排序规则对应你目标结果里的TransactionDate升序排列
  2. 根据组内行号拼接显示用的ProductID:
    • 行号为1时,直接显示原始ProductID
    • 行号大于1时,拼接成「原始ID.行号-1」的格式(比如行号2对应1.1,行号3对应1.2)

最终SQL代码

SELECT
    ProductID = CASE 
                   WHEN rn = 1 THEN CAST(OriginalProductID AS VARCHAR(20))
                   ELSE CAST(OriginalProductID AS VARCHAR(20)) + '.' + CAST(rn - 1 AS VARCHAR(20))
               END,
    TransactionDate,
    TransactionAmount
FROM (
    SELECT
        OriginalProductID = ProductID,
        TransactionDate,
        TransactionAmount,
        rn = ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY TransactionDate ASC)
    FROM ProductsSales
) t
ORDER BY OriginalProductID, rn

代码说明

  • 子查询中:
    • OriginalProductID保留原始的产品ID
    • rn是每组内的行号,按TransactionDate升序生成,确保同组内的记录顺序符合你目标结果的要求
  • 外层查询通过CASE语句拼接显示用的ProductID,实现你要的格式
  • 最终排序按原始ProductID和组内行号,保证分组和顺序正确

验证结果

执行上述SQL后,会得到你想要的格式:

ProductIDTransactionDateTransactionAmount
12022-11-0630
1.12022-11-1230
1.22022-11-2830
22022-11-0310
2.12022-11-1010
2.22022-11-1510
32022-11-0250

内容的提问来源于stack exchange,提问作者Al Simmons

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:05:15