如何在 Teradata 中将 3 条记录合并为一条记录?

How do I flatten 3 records into one in Teradata?

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

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

我有显示当前数据集的图像,但没有能够post它们的声望点数。

这是当前的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"

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

我有显示当前数据集的图像,但没有能够post它们的声望点数。

你很接近:-)

只需 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,反正默认就是了。