如何在Teradata中将3条记录拼成一张?

问题描述 投票:1回答:1

我有一个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个回答
3
投票

你很亲密:-)

只需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,无论如何都是默认值。

© www.soinside.com 2019 - 2024. All rights reserved.