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

如何在SQL Server中为同值列生成连续序号(No.列)

如何在SQL Server中生成符合预期的连续序号(No.列)

目标数据表格

No.ReferenceNumberTransactionTimeAmountSource
13099N/A-1125A
23099N/A-1125B
33100N/A-375B
4310105:00-375A
5310105:002000B
6310106:002000A
7310206:002500B

尝试的T-SQL代码

SELECT 
    ROW_NUMBER() OVER (ORDER BY ReferenceNumber asc) No., 
    ReferenceNumber, TransactionTime, Amount, Source
FROM 
    aTable 

执行后得到的不符合预期结果

No.ReferenceNumberTransactionTimeAmountSource
13099N/A-1125A
23099N/A-375B
33100N/A-1125B
4310105:00-375A
5310105:002000B
6310106:002500B
7310206:002000A

解决方案

要生成和目标表格一致的连续序号,需调整ROW_NUMBER()的排序规则,加入多维度排序条件,确保行的顺序与目标数据完全匹配:

SELECT 
    ROW_NUMBER() OVER (
        ORDER BY 
            ReferenceNumber ASC,
            TransactionTime ASC,
            Amount ASC,
            Source ASC
    ) AS [No.], 
    ReferenceNumber, TransactionTime, Amount, Source
FROM 
    aTable 

规则说明

  • 优先按ReferenceNumber升序,保证相同编号的行归为一组
  • 其次按TransactionTime升序,区分不同时间的行(如3101的05:00行排在06:00行之前)
  • 再按Amount升序,区分同编号、同时间下的行(如3101 05:00的-375行排在2000行之前)
  • 最后按Source升序,处理同编号、同时间、同金额的行顺序(如3099的A行排在B行之前)

通过多字段组合排序,ROW_NUMBER()即可生成与目标表格完全一致的连续序号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:35:31