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

如何用SQL SELECT语句实现类似Vlookup的零件号提取统计功能?

优化零件标识统计的SQL方案

嘿,作为StackOverflow新手能想到用CASE语句来实现分类统计已经很不错啦!不过你当前的写法如果后续要新增更多零件标识,会让CASE变得越来越冗长,维护起来很麻烦。我给你两个更简洁、易维护的方案,都是只用SELECT语句就能实现的:

方案1:用匹配列表JOIN实现统计(适合无优先级需求)

这个方案把所有需要匹配的标识集中管理,新增/修改标识只需要调整列表部分,而且能完整统计每个标识的使用次数(包括0次的情况):

SELECT 
    m.MatchCode,
    COUNT(p.Part_No) AS UsageCount
FROM 
    (VALUES 
        ('B-123'),
        ('B-456'),
        ('IW-10'),
        ('T-TLT'),
        ('B-TLT3060')
        -- 后续新增标识直接在这里加行即可
    ) AS m(MatchCode)
LEFT JOIN 
    Part p ON p.Part_No LIKE '%' + m.MatchCode + '%'
GROUP BY 
    m.MatchCode
ORDER BY 
    UsageCount DESC;

注意:如果同一个零件号可能匹配多个标识,这个方案会把它统计到所有匹配的标识下,如果你需要和原来CASE一样的“只匹配第一个符合条件的标识”逻辑,就用下面的方案。

方案2:模拟CASE的优先级匹配(精准还原原逻辑)

这个方案和你原来的CASE语句逻辑完全一致,每个零件号只会被统计到第一个匹配到的优先级最高的标识下,同时也方便维护匹配列表:

SELECT 
    m.MatchCode,
    COUNT(p.Part_No) AS UsageCount
FROM 
    Part p
CROSS APPLY (
    SELECT TOP 1 MatchCode
    FROM (VALUES 
        ('B-123'),
        ('B-456'),
        ('IW-10'),
        ('T-TLT'),
        ('B-TLT3060')
    ) AS mc(MatchCode)
    WHERE p.Part_No LIKE '%' + mc.MatchCode + '%'
    ORDER BY 
        -- 这里的数字对应匹配优先级,越小越先匹配,和你原来CASE的顺序一致
        CASE mc.MatchCode
            WHEN 'B-123' THEN 1
            WHEN 'B-456' THEN 2
            WHEN 'IW-10' THEN 3
            WHEN 'T-TLT' THEN 4
            WHEN 'B-TLT3060' THEN 5
            ELSE 99
        END
) AS m
GROUP BY 
    m.MatchCode
ORDER BY 
    UsageCount DESC;

这两个方案都比冗长的CASE语句更易读、易维护,你可以根据自己的实际需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:44