Ответ 1
Вы можете предоставить псевдонимы новым столбцам в предложении pivot
оператора IN
.
(Примечание: это отличается от стандартного условия where IN()
, которое не допускает псевдонимов.)
with testdata as
(
select 'Fred' First_Name, 10 Items from dual
union
select 'John' First_Name, 5 Items from dual
union
select 'Jane' First_Name, 12 Items from dual
union
select 'Fred' First_Name, 15 Items from dual
)
select * from testdata
pivot (
sum(Items)
for First_Name
in ('Fred' as fred,'John' as john,'Jane' as jane)
)
а также для вашего агрегатного предложения, которое необходимо, если у вас есть несколько предложений.
with testdata as
(
select 'Fred' First_Name, 10 Items from dual
union
select 'John' First_Name, 5 Items from dual
union
select 'Jane' First_Name, 12 Items from dual
union
select 'Fred' First_Name, 15 Items from dual
)
select * from testdata
pivot (
sum(Items) itmsum,
count(Items) itmcnt
for First_Name
in ('Fred' as fred,'John' as john,'Jane' as jane)
)
возвращает
FRED_ITMSUM FRED_ITMCNT JOHN_ITMSUM JOHN_ITMCNT JANE_ITMSUM JANE_ITMCNT
----------- ----------- ----------- ----------- ----------- -----------
25 2 5 1 12 1
Конечно, тогда вы можете пройти полный круг и использовать стандартный псевдоним оракула и переименовать их в любое удобное для вас место, включая повторное добавление кавычек.
with testdata as
(
select 'Fred' First_Name, 10 Items from dual
union
select 'John' First_Name, 5 Items from dual
union
select 'Jane' First_Name, 12 Items from dual
union
select 'Fred' First_Name, 15 Items from dual
)
select FRED_ITMSUM "Fred Sum", FRED_ITMCNT "Fred Count"
, JOHN_ITMSUM "John Sum", JOHN_ITMCNT "John Count"
, JANE_ITMSUM "Janes Sum", JANE_ITMCNT "Janes Count"
from testdata
pivot (
sum(Items) itmsum,
count(Items) itmcnt
for First_Name
in ('Fred' as fred,'John' as john,'Jane' as jane)
)
дает
Fred Sum Fred Count John Sum John Count Janes Sum Janes Count
---------- ------------ ---------- ------------ ----------- -------------
25 2 5 1 12 1