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

SQL中如何检查唯一值?请求修正Bank表的查询语句

解决Bank表重复值标识计算列问题

你的原查询无法运行的核心问题是:子查询SELECT Bank_Value FROM [Bank] GROUP BY Bank_Value HAVING COUNT(*) = 1可能返回多行结果,而=运算符仅支持单行值比较,因此会触发语法/逻辑错误。同时原逻辑也未准确匹配需求——你需要判断当前行的Bank_Value(去空后)的出现次数是否大于1,而非和某个唯一值做相等判断。

以下是两种可行的修正方案:

方法1:使用窗口函数(推荐,性能更优)

窗口函数可以直接在每行计算对应Bank_Value的出现次数,无需额外关联操作:

SELECT 
    Bank_Value,
    CASE 
        WHEN COUNT(*) OVER (PARTITION BY NULLIF(LTRIM(RTRIM(Bank_Value)), '')) > 1 
        THEN '1'  -- 标记为存在重复
        ELSE '0'  -- 标记为唯一值
    END AS Bank_Value_Unique
FROM [Bank]

逻辑说明

  • NULLIF(LTRIM(RTRIM(Bank_Value)), ''):先对Bank_Value做去首尾空格处理,若处理后为空则转为NULL(避免空字符串被当作独立值统计)
  • COUNT(*) OVER (PARTITION BY ...):按去空后的Bank_Value分组,计算每组的行数(即该值的出现次数)
  • 根据次数判断:次数>1则标记为'1'(重复),否则为'0'(唯一)

方法2:使用分组子查询关联

先分组统计每个去空后Bank_Value的出现次数,再与原表关联匹配:

SELECT 
    b.Bank_Value,
    CASE 
        WHEN t.cnt > 1 THEN '1' 
        ELSE '0' 
    END AS Bank_Value_Unique
FROM [Bank] b
LEFT JOIN (
    SELECT 
        NULLIF(LTRIM(RTRIM(Bank_Value)), '') AS cleaned_value,
        COUNT(*) AS cnt
    FROM [Bank]
    GROUP BY NULLIF(LTRIM(RTRIM(Bank_Value)), '')
) t ON NULLIF(LTRIM(RTRIM(b.Bank_Value)), '') = t.cleaned_value

逻辑说明

  1. 子查询先对所有Bank_Value做去空处理,分组统计每个值的出现次数
  2. 原表通过去空后的值与子查询结果关联,获取当前行对应值的出现次数
  3. 根据次数判断是否标记为重复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:35:17