使用 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'
(在 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'