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

基于Teradata使用CASE语句进行列值匹配与筛选

解决Teradata中多列值匹配的记录保留问题

针对你需要保留**任意初始列(Diag_Prefix、Diag2_Prefix、Diag3_Prefix)的值匹配任意目标列(Xref_Diag_Prefix、Xref_Dia2g_Prefix、Xref_Diag2_Prefix)**的记录需求,这里提供两种实用的Teradata SQL实现方案:

方法1:直观的OR+IN逻辑写法

这种写法逻辑清晰,容易理解和维护,适合快速落地需求:

SELECT *
FROM your_table_name
WHERE 
  -- 检查Diag_Prefix是否匹配任意目标列
  Diag_Prefix IN (Xref_Diag_Prefix, Xref_Dia2g_Prefix, Xref_Diag2_Prefix)
  OR 
  -- 检查Diag2_Prefix是否匹配任意目标列
  Diag2_Prefix IN (Xref_Diag_Prefix, Xref_Dia2g_Prefix, Xref_Diag2_Prefix)
  OR 
  -- 检查Diag3_Prefix是否匹配任意目标列
  Diag3_Prefix IN (Xref_Diag_Prefix, Xref_Dia2g_Prefix, Xref_Diag2_Prefix);

方法2:用数组交集简化代码(适合高版本Teradata)

如果你的Teradata版本支持ARRAY和CARDINALITY函数,可以用更紧凑的方式实现,减少重复代码:

SELECT *
FROM your_table_name
WHERE 
  CARDINALITY(
    INTERSECT(
      ARRAY[Diag_Prefix, Diag2_Prefix, Diag3_Prefix],
      ARRAY[Xref_Diag_Prefix, Xref_Dia2g_Prefix, Xref_Diag2_Prefix]
    )
  ) > 0;

这个逻辑是把初始列和目标列分别打包成数组,然后取两个数组的交集——如果交集的元素数量大于0,就说明存在匹配值,这条记录会被保留。

额外提示:处理NULL值干扰

如果列中可能存在NULL值,建议用COALESCE替换NULL为一个不会参与匹配的占位符,避免NULL导致的匹配异常:

SELECT *
FROM your_table_name
WHERE 
  COALESCE(Diag_Prefix, '') IN (COALESCE(Xref_Diag_Prefix, ''), COALESCE(Xref_Dia2g_Prefix, ''), COALESCE(Xref_Diag2_Prefix, ''))
  OR 
  COALESCE(Diag2_Prefix, '') IN (COALESCE(Xref_Diag_Prefix, ''), COALESCE(Xref_Dia2g_Prefix, ''), COALESCE(Xref_Diag2_Prefix, ''))
  OR 
  COALESCE(Diag3_Prefix, '') IN (COALESCE(Xref_Diag_Prefix, ''), COALESCE(Xref_Dia2g_Prefix, ''), COALESCE(Xref_Diag2_Prefix, ''));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:33:27