【问题标题】:Teradata Case When statement - replacing values not in 1 column in resultTeradata Case When 语句 - 替换结果中不在 1 列中的值
【发布时间】:2020-01-13 19:11:54
【问题描述】:

我有两个表,想将它们组合在一起,如果不在一个列中,它将被添加到另一列。这样,如果它们匹配,除了第 1 列不包含第 1 列中的名称之外,将出现“N/A”,并且与第 2 列相同。

我让名称与存在的行匹配,并让“N/A”出现在不匹配的第 2 列中。我无法将更多行添加到不匹配的第 1 列。我在第 1 列中总共有 800 行,在第 2 列中有 330 行匹配。在第 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 行

【问题讨论】:

  • 我不明白你到底想做什么,请显示一些示例数据和期望的结果。

标签: teradata teradata-sql-assistant


【解决方案1】:

这是我对您尝试做的事情的理解:

  • 您有两个表,其中包含要“合并”的数据
  • 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 中联接的更多信息:link

【讨论】:

  • 感谢您的帮助!有效。抱歉回复晚了。
  • 哇哦!乐于助人:)
猜你喜欢
  • 2015-09-17
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2019-03-31
  • 1970-01-01
  • 2017-04-01
相关资源
最近更新 更多