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

如何在SQL Server中为重复公司名称前生成序号

解决SQL Server中重复公司名称生成唯一值的问题

嘿,我懂你的痛点——要把重复的公司名称改成唯一值,适配那个只接受唯一名称的平台对吧?你用ROW_NUMBER()结合PARTITION BY的思路完全没问题,只是在序号拼接的细节上可以调整一下,让结果更符合需求。

核心思路

我们先给每个重复的公司名称按分组分配序号,然后只在非第一个出现的名称后面加上序号(比如ABC Corp (1)、ABC Corp (2)),第一个保持原名不变,这样既保证唯一性,又不会破坏原始名称的可读性。

示例数据集

假设你的源表叫CompanyImportData,结构和数据大概是这样:

CompanyNameAddressCityContact
ABC Corp123 Main StNYJohn Doe
ABC Corp456 Oak AveLAJane Smith
XYZ Inc789 Pine RdCHIBob Brown
ABC Corp321 Elm LnHOUAlice Lee

实现代码

SELECT
    -- 仅对重复项(序号>1)拼接序号
    CASE 
        WHEN RowNum > 1 THEN CONCAT(CompanyName, ' (', RowNum - 1, ')')
        ELSE CompanyName
    END AS UniqueCompanyName,
    Address,
    City,
    Contact
FROM (
    -- 内部查询:按公司名称分组,给每条记录分配序号
    SELECT
        CompanyName,
        Address,
        City,
        Contact,
        -- 这里的ORDER BY可以换成你需要的排序字段(比如Address/Contact)
        ROW_NUMBER() OVER (PARTITION BY CompanyName ORDER BY (SELECT NULL)) AS RowNum
    FROM CompanyImportData
) AS NumberedCompanies
-- 最终按公司名称和序号排序,保持逻辑顺序
ORDER BY CompanyName, RowNum;

代码解释

  1. 内部子查询:用ROW_NUMBER() OVER (PARTITION BY CompanyName ...)给每个相同公司名称的记录分配一个递增的序号,PARTITION BY负责按公司名称分组,ORDER BY控制序号的生成顺序(如果需要按地址、联系人排序,把(SELECT NULL)换成对应的字段即可)。
  2. 外部查询:通过CASE判断,如果是分组内的第一条记录(RowNum=1),直接保留原公司名称;否则在名称后拼接(RowNum-1),让序号从1开始(避免出现ABC Corp (2)这种奇怪的命名)。

执行结果

运行上述代码后,你会得到符合要求的唯一名称数据集:

UniqueCompanyNameAddressCityContact
ABC Corp123 Main StNYJohn Doe
ABC Corp (1)456 Oak AveLAJane Smith
ABC Corp (2)321 Elm LnHOUAlice Lee
XYZ Inc789 Pine RdCHIBob Brown

这样处理后,所有公司名称都是唯一的,完美适配目标平台的要求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:03:02