(在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中,或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"的值填充。这些记录在上面的案例语句中包含,因此我试图将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)
但这给我一个错误,指出:" ...期望像'成功','opets',''','''''''或'包含'(和'和'''''''''''''''''和'和'和'和'和'和'和'和'和'和'和'''和'和''和'''和'和'和'''和'和'关键字。">
我不确定只能以某种方式创建VT是否会更容易。任何帮助将不胜感激。
这似乎在没有案例语句妨碍的情况下更容易执行,而只是忽略了'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'