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

如何用Teradata SQL检查客户的National Insurance Number是否唯一

如何在Teradata中检查客户NIN的唯一性并统计重复次数

正确的Teradata SQL查询

要得到每个客户对应的NIN重复次数,使用COUNT()窗口函数是最直接高效的方式,同时可以过滤无效的空值NIN:

SELECT 
    客户编号,
    ninnbr,
    COUNT(*) OVER (PARTITION BY ninnbr) AS 重复次数
FROM 
    你的客户表名
WHERE 
    ninnbr IS NOT NULL 
    AND ninnbr <> ''; -- 排除无有效NIN的记录

逻辑说明

  • COUNT(*) OVER (PARTITION BY ninnbr):按ninnbr分组,计算每个分组内的总记录数,也就是该NIN的重复次数,每一行都会显示对应分组的计数结果。
  • WHERE子句:过滤掉空值或空字符串的NIN,避免无效数据干扰统计结果。

你原有代码的问题

你之前使用的SUM(CASE...)窗口函数加上ORDER BY UPDATEDTTM DESC,会计算累计值(从最新记录到当前行的计数),而非该NIN的总重复次数。即使去掉ORDER BY,COUNT()也比SUM(CASE...)更简洁高效。

样本数据验证

用你提供的样本数据执行上述查询,会得到你期望的输出:

客户编号ninnbr重复次数
123AA111111AA3
456AA111111AA3
678AA111111AA3
910AB123456AB1
109AC123456AB1
549AD123456AD2
295AD123456AD2
743AE123456AE1
443AF123456AF1
903AG123456AG1

后续聚合统计

如果要对唯一NIN(重复次数=1)进行聚合统计,有两种高效方式:

方式一:基于窗口函数结果过滤

SELECT 
    ninnbr,
    COUNT(客户编号) AS 客户数量 -- 可替换为其他聚合操作
FROM (
    SELECT 
        客户编号,
        ninnbr,
        COUNT(*) OVER (PARTITION BY ninnbr) AS 重复次数
    FROM 
        你的客户表名
    WHERE 
        ninnbr IS NOT NULL 
        AND ninnbr <> ''
) t
WHERE 重复次数 = 1
GROUP BY ninnbr;

方式二:直接分组过滤(更高效)

SELECT 
    ninnbr,
    COUNT(客户编号) AS 客户数量
FROM 
    你的客户表名
WHERE 
    ninnbr IS NOT NULL 
    AND ninnbr <> ''
GROUP BY ninnbr
HAVING COUNT(客户编号) = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:44:56