我有两个表,想将它们组合在一起,如果不在一列中,它将被添加到另一列中。这样,如果它们匹配,除了第 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 中联接的更多信息:链接