Переместить строки в столбец и столбцы в строку в устном SQL - PullRequest
0 голосов
/ 02 октября 2019

Я получаю следующие выходные данные SQL оракула из моего сценария.

Status     Item1 Item2 Item3 Item4
Processed     22    12    10     0
Error         11    22     0     0
Unsent        10    11     0    22

Я хотел бы переместить строки в столбец и столбцы в строку и отобразить в формате SQL в следующем формате, используя PIVOT & UNPIVOT.

Items   Processed  Error  Unsent
Item1          22     11      10
Item2          12     22      11 
Item3          10      0       0
Item4           0      0      22

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Один вариант будет использовать условное агрегирование, включая выражение unpivot:

select items as "Items",
       max(case when status = 'Processed' then value end) as "Processed",
       max(case when status = 'Error' then value end) as "Error",
       max(case when status = 'Unsent' then value end) as "Unsent"
  from tab
unpivot (value for items in ( Item1, Item2, Item3, Item4 ))
  group by items
  order by "Items";

Демо

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

0 голосов
/ 02 октября 2019

Это сложно;это требует разворота и поворота. Вот один из методов:

select item,
       sum(case when status = 'Processed' then val end) as processed,
       sum(case when status = 'Error' then val end) as error,
       sum(case when status = 'Unsent' then val end) as unsent
from ((select 'Item1' as item, status, item1 as val from t
      ) union all
      (select 'Item2' as item, status, item2 from t
      ) union all
      (select 'Item3' as item, status, item3 from t
      ) 
     ) i
group by item;
...