【问题标题】:Fill in values from other data in the same column (Teradata)填充同一列中其他数据的值 (Teradata)
【发布时间】:2018-10-12 18:01:25
【问题描述】:

我有一个查询结果的表(它很大!),看起来像这样。

表试图按类型计算每个 id 中的一组名称(seq_num 1,2..),但当不同类型出现在同一个 id 中时,它会留下零

我想得到一个看起来像这样的结果。

不能使用 subquery 或 max ,因为这需要 group by ,因为查询已经太复杂了。

非常感谢这里的一些帮助。 谢谢!

最右边那四列的查询代码:

CASE WHEN (TYPE = 'E') THEN (DENSE_RANK() OVER (PARTITION BY ID,TYPE ORDER BY NAME) + DENSE_RANK() OVER (PARTITION BY ID, TYPE ORDER BY NAME DESC) - 1) ELSE 0 END AS NC_E,

CASE WHEN (TYPE = 'M') THEN (DENSE_RANK() OVER (PARTITION BY ID,TYPE ORDER BY NAME) + DENSE_RANK() OVER (PARTITION BY ID, TYPE ORDER BY NAME DESC) - 1) ELSE 0 END AS NC_M,

CASE WHEN (TYPE = 'D') THEN (DENSE_RANK() OVER (PARTITION BY ID,TYPE ORDER BY NAME) + DENSE_RANK() OVER (PARTITION BY ID, TYPE ORDER BY NAME DESC) - 1) ELSE 0 END AS NC_D,

CASE WHEN (TYPE = 'C') THEN (DENSE_RANK() OVER (PARTITION BY ID,TYPE ORDER BY NAME) + DENSE_RANK() OVER (PARTITION BY ID, TYPE ORDER BY NAME DESC) - 1) ELSE 0 END AS NC_C

注意:我有其他 ID,其中 TYPE 没有改变,而且它工作正常,我可以理解为什么会这样。问题在于每个 ID 中的信息非常多样化。

【问题讨论】:

  • 您能否展示在现有查询中如何选择这些列?这可能是一些简单的 OLAP 函数。
  • 我刚刚更新了它,希望能回答你的问题。不过感谢您的快速回复。

标签: teradata teradata-sql-assistant


【解决方案1】:

您想要一个COUNT(DISTINCT Name) OVER (PARTITION BY ID, TYPE),Teradata 不支持它。

最有效的方法是嵌套的 OLAP 函数,这将导致两个 STAT 步骤,就像您当前的解决方案一样,所以这应该不会降低效率:

SELECT dt.*,
    Max(CASE WHEN type = 'E' THEN nc END) Over (PARTITION BY id) AS NC_E
   ,Max(CASE WHEN type = 'M' THEN nc END) Over (PARTITION BY id) AS NC_M 
   ,Max(CASE WHEN type = 'D' THEN nc END) Over (PARTITION BY id) AS NC_D 
   ,Max(CASE WHEN type = 'C' THEN nc END) Over (PARTITION BY id) AS NC_C 
FROM
 ( 
   SELECT ....
      Dense_Rank() Over (PARTITION BY ID, TYPE_ ORDER BY NAME) AS nc
   FROM ...
 ) AS dt

【讨论】:

  • 是的,这正是我想要做的。每次我必须使用刚刚创建的变量来避免分组时,都需要嵌套。我已经做过很多次了,以至于我试图避免它。但我想没有其他选择。非常感谢您的帮助。真的很感激。顺便说一句,他们为什么没有为我们创建一个能够进行唯一计数的函数?我试图投票,但它没有显示,因为我刚刚加入,lol
  • @Shubham:DISTINCT 在并行系统中是一项相当昂贵的操作,他们可能没有找到一种有效的方法来为 OLAP 函数实现这一点。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2019-06-06
相关资源
最近更新 更多