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

T-SQL如何统计单条记录多列不同货币值的数量

T-SQL 实现每行多字段去重计数方案

推荐方案(兼容 SQL Server 2008 及以上版本)

通过VALUES子句将同一行的4个货币字段转为临时行集,直接统计去重后的值数量即可,语法简洁易维护:

SELECT 
    *,
    (
        SELECT COUNT(DISTINCT CurrVal)
        FROM (VALUES (Curr1), (Curr2), (Curr3), (Curr4)) AS t(CurrVal)
        -- 若不需要将NULL计入统计,可取消下一行注释
        -- WHERE CurrVal IS NOT NULL
    ) AS CurrencyCount
FROM 你的表名

该方案完全匹配示例计算逻辑:

  • 字段值为GBP、USD、GBP、GBP时返回2
  • 字段值为GBP、EUR、GBP、USD时返回3
  • 字段值全为GBP时返回1
  • 字段值为GBP、GBP、GBP、EUR时返回2

兼容老旧版本方案(支持 SQL Server 2000 及以上)

如果你的数据库版本不支持VALUES子句构造多行,可以用逐层去重判断的方式实现:

SELECT 
    *,
    CASE WHEN Curr1 IS NOT NULL THEN 1 ELSE 0 END
    + CASE WHEN Curr2 IS NOT NULL AND Curr2 <> Curr1 THEN 1 ELSE 0 END
    + CASE WHEN Curr3 IS NOT NULL AND Curr3 NOT IN (Curr1, Curr2) THEN 1 ELSE 0 END
    + CASE WHEN Curr4 IS NOT NULL AND Curr4 NOT IN (Curr1, Curr2, Curr3) THEN 1 ELSE 0 END
    AS CurrencyCount
FROM 你的表名

持久化计算结果

如果需要将CurrencyCount作为表的固定列自动计算,可以新增计算列:

ALTER TABLE 你的表名
ADD CurrencyCount AS (
    SELECT COUNT(DISTINCT CurrVal)
    FROM (VALUES (Curr1), (Curr2), (Curr3), (Curr4)) AS t(CurrVal)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:54:04