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

SSMS中实现Job分组内客户代码连续编号并指定优先排序

SQL分组序号与指定排序实现方案

我刚接触SQL仅数日,使用SSMS编写查询语句,当前通过以下SQL统计每个Job_Number对应的客户总数:

SELECT CR_CONTRACT_MASTER1_V.Job_Number, CR_CONTRACT_MASTER1_V.CUSTOMER_CODE,
    COUNT(CR_CONTRACT_MASTER1_V.Job_Number) OVER (PARTITION BY CR_CONTRACT_MASTER1_V.Job_Number)
From CR_CONTRACT_MASTER1_V
GROUP BY CR_CONTRACT_MASTER1_V.Job_Number, CR_CONTRACT_MASTER1_V.CUSTOMER_CODE
ORDER BY 3 DESC

查询结果:

21-0138  NULT01      3
   21-0138  WASAN       3
   21-0138  WMRENEW     3
   21-0204  AMA12       2
   21-0204  GSOI3       2

需求1:生成分组内连续序号

要实现每个Job_Number分组下客户代码对应生成连续序号,可使用ROW_NUMBER()窗口函数,按Job_Number分区后生成序号:

SELECT 
    Job_Number,
    CUSTOMER_CODE,
    ROW_NUMBER() OVER (PARTITION BY Job_Number ORDER BY CUSTOMER_CODE) AS 客户序号
FROM CR_CONTRACT_MASTER1_V
GROUP BY Job_Number, CUSTOMER_CODE
ORDER BY Job_Number, 客户序号

执行后结果:

21-0138  NULT01      1
   21-0138  WASAN       2
   21-0138  WMRENEW     3
   21-0204  AMA12       1
   21-0204  GSOI3       2

说明:ROW_NUMBER()会在每个PARTITION BY指定的分组(此处为Job_Number)内,按ORDER BY指定的客户代码字母顺序,生成从1开始的连续序号。

需求2:指定客户代码NULT01始终排在分组首位

要让NULT01在对应Job分组中优先排序,不受字母顺序影响,可在ORDER BY中通过CASE表达式调整排序优先级,再生成序号:

SELECT 
    Job_Number,
    CUSTOMER_CODE,
    ROW_NUMBER() OVER (
        PARTITION BY Job_Number 
        ORDER BY 
            CASE WHEN CUSTOMER_CODE = 'NULT01' THEN 0 ELSE 1 END,
            CUSTOMER_CODE
    ) AS 客户序号
FROM CR_CONTRACT_MASTER1_V
GROUP BY Job_Number, CUSTOMER_CODE
ORDER BY Job_Number, 客户序号

执行后结果:

21-0138  NULT01      1
   21-0138  WASAN       2
   21-0138  WMRENEW     3
   21-0204  NULT01      1
   21-0204  GSOI3       2

说明:CASE表达式将NULT01的排序权重设为0,其他客户设为1,确保NULT01在分组内排在最前面;剩余客户则按字母顺序排序,ROW_NUMBER()基于这个规则生成序号。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:15:43