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

在Teradata中根据列重复情况新增列查询表的实现方法

Teradata实现新增标识列的查询方案

原表数据

IdType
1A
1B
1B
2A
3B

目标结果

IdTypeId with both A+BId with only A
1A10
1B10
1B10
2A01
3B00

实现SQL

SELECT 
    Id,
    Type,
    -- 判断当前Id是否同时存在A和B类型
    CASE 
        WHEN MAX(CASE WHEN Type = 'A' THEN 1 ELSE 0 END) OVER (PARTITION BY Id) = 1 
             AND MAX(CASE WHEN Type = 'B' THEN 1 ELSE 0 END) OVER (PARTITION BY Id) = 1 
        THEN 1 
        ELSE 0 
    END AS "Id with both A+B",
    -- 判断当前Id是否仅存在A类型
    CASE 
        WHEN MAX(CASE WHEN Type = 'A' THEN 1 ELSE 0 END) OVER (PARTITION BY Id) = 1 
             AND MAX(CASE WHEN Type = 'B' THEN 1 ELSE 0 END) OVER (PARTITION BY Id) = 0 
        THEN 1 
        ELSE 0 
    END AS "Id with only A"
FROM your_table_name;

逻辑说明

  1. 利用窗口聚合函数MAX() OVER (PARTITION BY Id)统计每个Id下的类型分布:
    • 对Type='A'的行标记1,其余标记0,取最大值得到该Id是否包含A(1=存在,0=不存在)
    • 同理统计该Id是否包含B
  2. 通过外层CASE WHEN组合两个统计结果,生成目标标识列:
    • 当Id同时包含A和B时,"Id with both A+B"设为1,否则为0
    • 当Id仅包含A、不包含B时,"Id with only A"设为1,否则为0

这种方式无需额外关联子查询,直接在原表基础上通过窗口函数计算,适配Teradata的分布式架构,执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:25:21