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

时间:2018-02-23 19:46:47

标签: case teradata

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

列 Diag_Prefix,Diag2_Prefix和Diag3_Prefix 被比作 Xref_Diag_Prefix,Xref_Dia2g_Prefix,Xref_Diag2_Prefix

因此,作为示例,如果Diag_Prefix包含值A10并且该值也包含在Xref_Diag_Prefix,OR Xref_Dia2g_Prefix或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)

但是这给了我一个错误,指出:“......预期''成功'','会'','预先','进入'或'CONTAINS'关键字'''和'AND' '关键字。“

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

1 个答案:

答案 0 :(得分:1)

这似乎更容易做到没有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'