【问题标题】:Teradata SQL - select distinct returning duplicate rows where one row has null valuesTeradata SQL - 选择不同的返回重复行,其中一行具有空值
【发布时间】:2018-03-26 15:21:33
【问题描述】:

我被困在查询中,我正在加入多个表以引入特定主键所需的属性。我发现我收到了重复的行,它们本质上是相同的,但是一行在几列中有空(?)值。我只想返回填充数据的行。

到目前为止,我已经检查了我所有的 vol 表,并且没有重复,并且在我的最终 vol 表之前我有相同的不同行数。我正在加入来自最终 vol 表中其他表的新数据,并将发布该查询,但只是好奇是否有人知道“SELECT DISTINCT”为什么会发生这种情况。

我尝试使用“WHERE PROD_LN IS NOT NULL”子句,但我有一些不是重复的,并且不会有 PROD_LN 的值。我还在考虑尝试“当 PROD_LN 为 NULL 时 PROD_LN = PROD_LINE NOT NULL 的情况”,但不确定这是否可行。任何帮助表示赞赏!

        ACCT_NAME | GRP_ID   |  GRP_B  | ASGND_CD | PROD_LN | PROD_TYP | PLCY_TYP | FINCL | MKT_SGMT |
    ENTERPRISE A  | 00012345 |  N12345 |    1     |    ?    |     ?    |     8    |   ?   |     ?    |
    ENTERPRISE A  | 00012345 |  N12345 |    1     |    H    |   SPPO   |     8    |  ASO  |    AFG   |

【问题讨论】:

  • 您能否提供您正在使用的产生这些结果的 SQL 语句?

标签: sql select teradata


【解决方案1】:

我想你想要这样的东西:

select t.*
from t
qualify row_number() over (partition by ACCT_NAME, GRP_ID, GRP_B, ASGND_CD
                           order by prod_ln nulls last
                          ) = 1;

我猜你所说的重复是指前四列。无论如何,partition by 应该是您希望唯一的列。

【讨论】:

  • 感谢您的回复!这会只返回不存在空值的行还是全部返回,但最后按空值排序?
  • @CGermain 。 .. 这将为partition by 列中的每个值组合返回一行。如果可能,该行将有prod_ln 而不是NULL。否则,该行将在该列中具有NULL 值。
猜你喜欢
  • 2016-07-22
  • 2015-05-24
  • 2019-07-06
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多