Использование 1 строки данных для создания до 3 строк вывода SQL - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь создать запрос, в котором может быть до 3 строк вывода из 1 строки ввода:

Любое из следующего не является нулевым (e_date / c_date / o_date) - > Создать одну запись в выходных данных

Любые 2 из следующих не являются нулевыми (e_date / c_date / o_date) à создать 2 записи в выходных данных

Все 3 следующих поля даты не являются нулевыми (e_date / c_date / o_date) à Создайте 3 записи в выводе

Я приложил картинку ниже примера для этого. Если бы кто-нибудь мог помочь мне с кодом logi c, это было бы очень признательно.

enter image description here

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Вы можете использовать apply:

select cch_id, v.event_time, v.event_type 
from t cross apply
     (values ('e_type', e_date),
             ('c_type', c_date),
             ('o_type', o_date)
     ) v(event_type, event_time)             
where v.event_time is not null;

Конечно, вы можете включать и другие столбцы.

APPLY реализует функциональность, известную как боковое соединение . Такое разворачивание - это только один пример того, что могут сделать боковые соединения. Это хорошее введение в эту функцию.

1 голос
/ 16 марта 2020

Вы можете использовать UNION для этого. Например:

select cch_id, e_date as event_time, 'e_type' as event_type 
from t where e_date is not null
union
select cch_id, c_date, 'c_type' from t where c_date is not null
union
select cch_id, o_date, 'o_type' from t where o_date is not null
order by cch_id, event_time
...