Как объединить 3 записи в одну в Teradata? - PullRequest
1 голос
/ 03 апреля 2019

У меня есть запрос 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 - желаемый выход:

У меня есть изображения, которые показывают текущий набор данных, но у меня нет очков репутации, чтобы можно было их публиковать.

1 Ответ

3 голосов
/ 03 апреля 2019

Ты рядом :-)

Просто GROUP BY name и применить МАКС:

,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, это все равно по умолчанию.

...