【问题标题】:How do I flatten 3 records into one in Teradata?如何在 Teradata 中将 3 条记录拼合为一条?
【发布时间】:2019-08-24 22:34:22
【问题描述】:

我有一个 Teradata 查询,它将在一个公共字段中将最多三种不同类型的数据输出到 3 个单独的记录中。我目前正在使用 Case 语句将这些常见字段分解为唯一字段,但是,输出仍然是每人 3 条记录。

这是下一节中描述的当前 Case 语句的输出:

我有显示当前数据集的图像,但没有能够发布它们的信誉点。

这是当前的Case语句,它实现了根据测试名称将每组测试信息放入正确的列中:

,CASE WHEN Test = 'Biology' THEN BiologyName ELSE null END As "Biology Test Name"
,CASE WHEN Test = 'Biology' THEN BiologyDate ELSE null END as "Biology Test Date"
,CASE WHEN Test = 'Biology' THEN BiologyResult ELSE null END as "Biology Test Result"

,CASE WHEN Test = 'Calculus' THEN CalculusName ELSE null END As "Calculus Test Name"
,CASE WHEN Test = 'Calculus' THEN CalculusDate ELSE null END as "Calculus Test Date"
,CASE WHEN Test = 'Calculus' THEN CalculusResult ELSE null END as "Calculus Test Result"

,CASE WHEN Test = 'Language Arts' THEN LanguageArtsName ELSE null END As "LA Test Name"
,CASE WHEN Test = 'Language Arts' THEN LanguageArtsDate ELSE null END as "LA Test Date"
,CASE WHEN Test = 'Language Arts' THEN LanguageArtsResult ELSE null END as "LA Test Result"

考虑下图,其中左侧的数据 (Cols A-D) 是当前输出,而 Cols F-O 是所需的输出:

我有显示当前数据集的图像,但没有能够发布它们的信誉点。

【问题讨论】:

标签: arrays teradata flatten


【解决方案1】:

你已经接近了:-)

只需GROUP BY name 并应用 MAX:

,Max(CASE WHEN Test = 'Biology' THEN BiologyName END) AS "Biology Test Name"
,Max(CASE WHEN Test = 'Biology' THEN BiologyDate END) AS "Biology Test Date"
,Max(CASE WHEN Test = 'Biology' THEN BiologyResult END) AS "Biology Test Result"

,Max(CASE WHEN Test = 'Calculus' THEN CalculusName END) AS "Calculus Test Name"
,Max(CASE WHEN Test = 'Calculus' THEN CalculusDate END) AS "Calculus Test Date"
,Max(CASE WHEN Test = 'Calculus' THEN CalculusResult END) AS "Calculus Test Result"

,Max(CASE WHEN Test = 'Language Arts' THEN LanguageArtsName END) AS "LA Test Name"
,Max(CASE WHEN Test = 'Language Arts' THEN LanguageArtsDate END) AS "LA Test Date"
,Max(CASE WHEN Test = 'Language Arts' THEN LanguageArtsResult END) AS "LA Test Result"

ELSE NULL 不需要,反正它是默认值。

【讨论】:

  • 感谢您的回复,谢谢!我会试试看。回复:Else Null,我以为是这样。但是,当我使用我的 ETL 工具进行展平时,我必须先将空白条目更改为 null 才能起作用,所以我认为该字段中必须有一些东西。我现在正在检查...
  • 您可能能够预测我的下一个问题,因为我在 Group By 子句中收到了 SELECT Failed [3504] 错误。在我的数据集中,我有 4 个不同的标识符,我选择了适当的标识符用于场景中的分组,并将“GROUP BY AppID”添加到查询中。我注意到您提到了“按名称分组”,假设这个 UID 是一个名称字段,但对于数字标识符应该是一样的,对吗?我错过了什么?
  • 嗯...似乎我需要为每个连接语句使用提供 Group By 子句。对吗?
  • 如果没有看到实际的 Select 就很难判断,但您需要将 Select-list 中的 all 非聚合列添加到 Group By。
  • 非常感谢!我赞成您的回答,因为当我删除所有连接并且只输出一列然后按该列分组时,它可以工作。我可能最终会单独运行该查询,然后根据该 UID 加入它。再次感谢您的所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2017-02-24
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2021-11-05
相关资源
最近更新 更多