Teradata 大小写 When 语句 - 替换结果中不在 1 列中的值



我有两个表,想将它们组合在一起,如果不在一列中,它将被添加到另一列中。这样,如果它们匹配,除了第 1 列中不包含第 1 列中的名称,则会出现"N/A",并且第 2 列也是如此。

我获取与存在的行匹配的名称,并使"N/A"出现在不匹配的第 2 列中。我无法将更多行添加到没有匹配的列 1。我在第 800 列中总共有 1 行,第 330 列中有 2 行匹配。在第 2 列中有 30 个,它们不在第 1 列中。

所以我想得到总共 800 + 30 = 830 行的列表。 30 在第 1 列中为 N/A。

感谢您的帮助。 我看过这里和其他地方,但似乎没有什么匹配或接近,或者我只是不明白。

SELECT  
CASE 
WHEN cc.Db_Name = dr.DB_NAME THEN cc.DatabaseName
WHEN cc.DatabaseName <> dr.DBE_NAME THEN 'n/a'
ELSE cc.Db_Name
END AS SQL_DB_NAME
, CASE 
WHEN cc.Db_Name = dr.DB_NAME THEN dr.DATABASE_NAME
WHEN cc.Db_Name <> dr.DB_NAME THEN 'zz'
ELSE 'N/A'
END AS DG_DB_NAME
FROM DL_SCANS1 AS cc -- (column1)
LEFT JOIN DG_SCAN AS dr -- (column2)
ON dr.DB_NAME = cc.DB_Name AND dr.Table_View = 'TABLE'
GROUP BY cc.Db_Name, dr.DB_NAME 

结果:

SQL_DB_NAME DG_DB_NAME  
AAA         AAA  
BBB         BBB  
CCC         N/A  
N/A         DDD  

共 830 行

以下是我对您要做的事情的理解:

  • 您有两个表,其中包含要"合并"的数据
  • DL_SCAN1有 800 个"良好"值,您希望在Column 1中返回这些值
  • DG_SCAN有 30 个"良好"值,您希望在Column 2中返回这些值
  • 您希望返回 830 行,但当前查询仅返回 800 行

如果是这种情况,那么原因是因为您正在做LEFT JOIN。 这将获取"左"表(DL_SCAN1(中的所有800行,并将它们与"右"表(DG_SCAN(中具有相同DB_NAME值的匹配行组合在一起。 任何其他不匹配的行(来自DG_SCAN行(都将被丢弃。

尝试将LEFT JOIN更改为FULL OUTER JOIN,其中还将包括DG_SCAN中不匹配的行,这应该会给您缺少的 30 行。

FULL OUTER JOIN DG_SCAN AS dr -- (column2)
ON dr.DB_NAME = cc.DB_Name AND dr.Table_View = 'TABLE'

有关 Teradata 中联接的更多信息:链接