Как преобразовать один столбец SQL в несколько столбцов в одной строке? - PullRequest
1 голос
/ 05 ноября 2019

Я работаю в Progress ODBC в Excel, и у меня есть набор данных, который в настоящее время содержит идентификатор, тип объекта и результат для этого объекта. Набор данных выглядит примерно так:

EveNumber                   ObjName                                   TroValue
1234               818 Artwork typeset duration                       00:30:00
1234               818 Artwork Estimated typeset duration             00:40:00

Я пытаюсь получить эти данные, чтобы все сидели на одной строке, используя следующую команду: CASE WHEN

Select

Event_0.EveNumber
,(CASE WHEN Object_0.ObjName = '818 Artwork typeset duration' THEN TemplateRunObject_0.TroValue ELSE NULL END) AS 'BookedTime'
,(CASE WHEN Object_0.ObjName = '818 Artwork Estimated typeset duration' THEN TemplateRunObject_0.TroValue ELSE NULL END) AS 'EstimatedTime'

Что я нахожув том, что это приводит к ступенчатому результату. Таким образом, мои возвращенные данные все еще возвращаются в несколько строк. Примерно так:

EveNumber                BookedTime                    EstimatedTime              
1234                      00:30:00                                                     
1234                                                     00:40:00     

Что я могу сделать, чтобы вернуть этот результат в одну строку?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Вам необходимо GROUP BY:

Select Event_0.EveNumber,
       MAX(CASE WHEN Object_0.ObjName = '818 Artwork typeset duration' THEN TemplateRunObject_0.TroValue ELSE NULL END) AS BookedTime,
       MAX(CASE WHEN Object_0.ObjName = '818 Artwork Estimated typeset duration' THEN TemplateRunObject_0.TroValue ELSE NULL END) AS EstimatedTime
FROM . . .
GROUP BY Event_0.EveNumber;

Примечание: одинарные кавычки используются в SQL для определения строк и констант даты. Не используйте их для псевдонимов столбцов. Однажды это вызовет у вас проблемы, когда вы обращаетесь к столбцу, используя одинарные кавычки, но он интерпретируется как строка.

0 голосов
/ 05 ноября 2019

использовать условное агрегирование

Select
Event_0.EveNumber
,max(CASE WHEN Object_0.ObjName = '818 Artwork typeset duration' THEN TemplateRunObject_0.TroValue ELSE NULL END) AS 'BookedTime'
,max(CASE WHEN Object_0.ObjName = '818 Artwork Estimated typeset duration' THEN TemplateRunObject_0.TroValue ELSE NULL END) AS 'EstimatedTime'
group by Event_0.EveNumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...