Сводные данные из двух таблиц - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть две таблицы, Table_A - это средство отслеживания рабочих процессов, как показано ниже:

Table_A

Unique_ID    Status    Decision
1234         Open      Accept 
5678         Closed    Reject
9112         Closed    Accept
3141         Open      Reject

Table_B содержит некоторые из приведенных выше уникальных идентификаторов, а такжеразличные предупреждения, которые были сгенерированы (максимум 4).

Table_B

Unique_ID    Warning_Code    Warning
1234         1               Description1
1234         2               Description2
3141         1               Description2
5678         1               Description3
5678         2               Description1
5678         3               Description3

Мне бы хотелось иметь возможность поворачивать данные из Table_B для отображения ВСЕХ уникальных идентификаторов из Table_A в строках и иметь столбцы, которыепокажите, сколько раз появляется ошибка для этого идентификатора, и, что важно, что это за ошибка.Ожидаемый результат будет следующим:

Unique_ID    Status    Decision    Warning_1     Warning_2     Warning_3      Warning_4
1234         Open      Accept      Description1  Description2      -              -
5678         Closed    Reject      Description3  Description1  Description3  Description4
9112         Closed    Accept           -             -            -              -    
3141         Open      Reject      Description3       -            -              -

Я не уверен, возможен ли вообще такой поворот с SQL, поэтому любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

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

select 
  a.Unique_ID,Status,Decision,
  max(case when Warning_Code=1 then Warning end) as Warning_1,
  max(case when Warning_Code=2 then Warning end) as Warning_2,
  max(case when Warning_Code=3 then Warning end) as Warning_3,
  max(case when Warning_Code=4 then Warning end) as Warning_4
from tableA a inner join tableB b on a.Unique_ID=b.Unique_ID
group by a.Unique_ID,Status,Decision
0 голосов
/ 05 апреля 2019

Это базовый сводный запрос, вам нужно только выполнить левое соединение, если какая-либо строка в A не имеет решений в B:

select *
  from a left join b using (unique_id)
  pivot (max(warning) for warning_code in (1 w1, 2 w2, 3 w3, 4 w4))

демо

0 голосов
/ 05 апреля 2019

случай использования с агрегацией

select Unique_ID,Status ,Decision,
max(case when Warning_Code=1 then Warning end) as waring1
max(case when Warning_Code=2 then Warning end) waring2,
max(case when Warning_Code=3 then Warning end) waring3
from tablea a join tableb b on a.Unique_ID=b.Unique_ID 
group by Unique_ID,Status ,Decision
...