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

SQL Server 2008中如何按规则提取唯一ID及对应决策值

解决方案:基于决策记录生成唯一ID的状态表

先明确你的需求:从包含重复ID和多个决策记录的表T1中,生成一张每个ID唯一的结果表——只要该ID曾出现过Reject决策,就显示Reject;如果从未出现过Reject,则显示Pending。

输入表示例(T1)

iddecision
abc_0011Forward
abc_0011Forward
abc_0011Reject
abc_0012Forward
abc_0012Forward

期望输出表

iddecision
abc_0011Reject
abc_0012Pending

下面提供两种高效的SQL实现方案:

方案1:分组聚合 + 条件判断

通过GROUP BY按ID分组,统计每个ID下Reject的出现次数,再用CASE WHEN判断状态:

SELECT 
    id,
    CASE 
        -- 统计当前ID下Reject的记录数,大于0则返回Reject
        WHEN COUNT(CASE WHEN decision = 'Reject' THEN 1 END) > 0 THEN 'Reject'
        ELSE 'Pending'
    END AS decision
FROM T1
GROUP BY id;

逻辑说明:

  • COUNT(CASE WHEN decision = 'Reject' THEN 1 END)会只统计decision为Reject的记录数(其他记录会被转为NULL,COUNT不统计NULL)
  • 分组后每个ID只会返回一行结果,完美满足唯一性要求

方案2:EXISTS子查询 + DISTINCT

如果你的表有id和decision的联合索引,这种方案的查询性能会更优:

SELECT DISTINCT
    id,
    CASE
        -- 检查当前ID是否存在Reject记录
        WHEN EXISTS (SELECT 1 FROM T1 t2 WHERE t2.id = t1.id AND t2.decision = 'Reject')
        THEN 'Reject'
        ELSE 'Pending'
    END AS decision
FROM T1 t1;

逻辑说明:

  • DISTINCT确保每个ID只返回一行
  • EXISTS会在找到第一条匹配的Reject记录后立即停止查询,比全分组统计更高效(尤其在大表场景下)

两种方案都能实现你的需求,可以根据表的数据量和索引情况选择合适的方式。

内容的提问来源于stack exchange,提问作者Md Kamran Azam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:37