Использование pivot для нескольких столбцов строки Oracle
у меня есть следующие примеры данных в таблице Oracle (tab1
) и я пытаюсь преобразовать строки в столбцы. Я знаю, как использовать Oracle pivot в одном столбце. Но можно ли применить его к нескольким столбцам?
пример данных:
Type weight height
A 50 10
A 60 12
B 40 8
C 30 15
мой предполагаемый выход:
A-count B-count C-count A-weight B-weight C-weight A-height B-height C-height
2 1 1 110 40 30 22 8 15
что я могу сделать:
with T AS
(select type, weight from tab1 )
select * from T
PIVOT (
count(type)
for type in (A, B, C, D,E,F)
)
приведенный выше запрос дает мне следующий результат
A B C
2 1 1
Я могу заменить count(*)
С sum(weight)
или sum(height)
в высота или вес оси. То, что я хочу сделать, но не могу сделать, - это повернуть все три (Количество, вес и высота) в одном запросе.
можно ли это сделать с помощью pivot?
1 ответов
As документация показывает, вы можете иметь несколько предложений агрегатных функций. Таким образом, вы можете сделать это:
select * from (
select * from tab1
)
pivot (
count(type) as ct, sum(weight) as wt, sum(height) as ht
for type in ('A' as A, 'B' as B, 'C' as C)
);
A_CT A_WT A_HT B_CT B_WT B_HT C_CT C_WT C_HT
---- ---- ---- ---- ---- ---- ---- ---- ----
2 110 22 1 40 8 1 30 15
Если вы хотите столбцы в порядке, который вы показали, добавьте еще один уровень подзапроса:
select a_ct, b_ct, c_ct, a_wt, b_wt, c_wt, a_ht, b_ht, c_ht
from (
select * from (
select * from tab1
)
pivot (
count(type) as ct, sum(weight) as wt, sum(height) as ht
for type in ('A' as A, 'B' as B, 'C' as C)
)
);
A_CT B_CT C_CT A_WT B_WT C_WT A_HT B_HT C_HT
---- ---- ---- ---- ---- ---- ---- ---- ----
2 1 1 110 40 30 22 8 15