(在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会更容易。任何帮助将不胜感激。
答案 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'