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

如何用单条T-SQL脚本生成关联双列的客户ID与独立患者ID

当然可以用单条T-SQL语句搞定!咱们借助CTE(公共表表达式)就能把整个流程串起来,不用依赖存储过程。下面直接上解决方案,我会一步步给你解释逻辑:

单条T-SQL实现脚本

WITH ClientCTE AS (
    -- 第一步:提取唯一的客户组合,生成自增的Client ID
    SELECT DISTINCT
        [Client First Name],
        [Client Last Name],
        ROW_NUMBER() OVER (ORDER BY [Client First Name], [Client Last Name]) AS [Client ID]
    FROM (
        -- 替换成你的实际表名,或者保留这个VALUES子句直接用原始数据
        VALUES
            ('John', 'Wick', 'Raffie'),
            ('John', 'Wick', 'Coco'),
            ('Rick', 'Thomas', 'Sussie'),
            ('Peter', 'Parker', 'Hershey'),
            ('Peter', 'Parker', 'Malt'),
            ('Rick', 'Thomas', 'Poky'),
            ('Lucas', 'Desmond', 'Timmy')
    ) AS RawData([Client First Name], [Client Last Name], [Patient Name])
),
PatientCTE AS (
    -- 第二步:关联客户ID,生成全局唯一的Patient ID
    SELECT
        c.[Client ID],
        c.[Client First Name],
        c.[Client Last Name],
        rd.[Patient Name],
        ROW_NUMBER() OVER (ORDER BY c.[Client ID], rd.[Patient Name]) AS [Patient ID]
    FROM (
        -- 同样替换成你的实际表名,或者保留原始数据的VALUES子句
        VALUES
            ('John', 'Wick', 'Raffie'),
            ('John', 'Wick', 'Coco'),
            ('Rick', 'Thomas', 'Sussie'),
            ('Peter', 'Parker', 'Hershey'),
            ('Peter', 'Parker', 'Malt'),
            ('Rick', 'Thomas', 'Poky'),
            ('Lucas', 'Desmond', 'Timmy')
    ) AS RawData([Client First Name], [Client Last Name], [Patient Name])
    JOIN ClientCTE c 
        ON rd.[Client First Name] = c.[Client First Name]
        AND rd.[Client Last Name] = c.[Client Last Name]
)
-- 最终输出符合要求的结果
SELECT [Client ID], [Client First Name], [Client Last Name], [Patient Name], [Patient ID]
FROM PatientCTE
ORDER BY [Patient ID];

逻辑说明

  1. ClientCTE部分:先对客户的First Name + Last Name组合去重,用ROW_NUMBER()生成从1开始的唯一Client ID,排序规则可以根据你的需求调整(比如按姓名排序)。
  2. PatientCTE部分:把原始的每条患者记录和ClientCTE关联,拿到对应的Client ID,再用ROW_NUMBER()生成全局连续的Patient ID(这里按Client ID+患者姓名排序,保证ID顺序和你期望的一致;如果不需要特定顺序,也可以用ORDER BY (SELECT NULL),但建议指定明确排序规则避免ID顺序不稳定)。
  3. 最终查询直接输出整理好的结果,完全匹配你要的格式。

注意事项

如果你的数据已经存储在物理表/临时表中,只需要把两个VALUES代码块替换成FROM YourActualTableName即可,不用重复写原始数据。

内容的提问来源于stack exchange,提问作者Byron Louise Hudkin Festin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:00