使用 Case 语句进行比较和排除

Using Case Statement to Compare and Exclude

(在 Teradata 工作)我的任务是将 3 个特定列中的任何一个的值与其他 3 个特定列的值进行比较。如果初始 3 个指定列之一的值与第二组 3 列中任何一个的值匹配,我将包括该记录。

列 Diag_Prefix、Diag2_Prefix 和 Diag3_Prefix 正在被比较 外部参照_Diag_Prefix, Xref_Dia2g_Prefix , 外部参照_Diag2_Prefix

因此,举个例子,如果 Diag_Prefix 包含值 A10 并且该值也包含在 Xref_Diag_Prefix、OR Xref_Dia2g_Prefix、OR Xref_Diag2_Prefix 中,那么我会保留记录,否则我会排除它。

我相信我已经把这部分记下来了:

AND (CASE WHEN Diag_Prefix = Xref_Diag_Prefix OR Diag_Prefix = Xref_Diag2_Prefix OR Diag_Prefix = Xref_Diag3_Prefix
    OR Diag2_Prefix = Xref_Diag_Prefix OR Diag2_Prefix = Xref_Diag2_Prefix OR Diag2_Prefix = Xref_Diag3_Prefix
    OR Diag3_Prefix = Xref_Diag_Prefix OR Diag3_Prefix = Xref_Diag2_Prefix OR Diag3_Prefix = Xref_Diag3_Prefix
    THEN 'I' ELSE 'E' END) = 'I'

我的问题是这些列中的某些值是 'NULL',并且在这种情况下已填充了 'UNK' 的值。这些记录包含在我上面的 CASE 语句中,因此我试图将 UNK 值更改为每个字段的唯一值,如下所示:

    /* Converting UNK values to exclude from subsequent comparison case statement */
    AND (CASE WHEN Diag_Prefix = 'UNK' THEN 'UNKD1' ELSE Diag_Prefix END)
    AND (CASE WHEN Diag2_Prefix = 'UNK' THEN 'UNKD2' ELSE Diag2_Prefix END)
    AND (CASE WHEN Diag3_Prefix = 'UNK' THEN 'UNKD3' ELSE Diag3_Prefix END)
    AND (CASE WHEN Xref_Diag_Prefix = 'UNK' THEN 'UNKX1' ELSE Xref_Diag_Prefix END)
    AND (CASE WHEN Xref_Diag2_Prefix = 'UNK' THEN 'UNKX2' ELSE Xref_Diag2_Prefix END)
    AND (CASE WHEN Xref_Diag3_Prefix = 'UNK' THEN 'UNKX3' ELSE Xref_Diag3_Prefix END)

但这给了我一个错误,指出:“...期望像 'SUCCEEDS'、'MEETS'、'PRECEDES'、'IN' 或 'CONTAINS' 关键字在 ')' 和 'AND' 关键字之间。"

我不确定以某种方式创建 VT 是否更容易。任何帮助将不胜感激。

如果没有 CASE 语句妨碍并完全忽略 'UNK' 值,这似乎更容易做到:

WHERE
    ((
        Diag_Prefix = Xref_Diag_Prefix
        OR Diag_Prefix = Xref_Diag2_Prefix
        OR Diag_Prefix = Xref_Diag3_Prefix
    ) AND Diag_Prefix <> 'UNK')
    OR ((
        Diag2_Prefix = Xref_Diag_Prefix
        OR Diag2_Prefix = Xref_Diag2_Prefix
        OR Diag2_Prefix = Xref_Diag3_Prefix
    ) AND Diag2_Prefix <> 'UNK')
    OR ((
        Diag3_Prefix = Xref_Diag_Prefix
        OR Diag3_Prefix = Xref_Diag2_Prefix
        OR Diag3_Prefix = Xref_Diag3_Prefix
    ) AND Diag3_Prefix <> 'UNK'