Oracle Pivot query предоставляет столбцы с кавычками вокруг имен столбцов. Что?

Я пытаюсь использовать PIVOT в Oracle, и я получаю странный результат. Вероятно, это просто вариант, который мне нужно установить, но то, что я знаю о Oracle/SQL, я мог бы поместить в это поле комментариев.

вот пример моего запроса:

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','John','Jane')

результаты выходят так, как я ожидал, за исключением имен столбцов с одинарными кавычками вокруг них (изображение из жабы-если я экспортирую в Excel, котировки переносятся в Excel):

Toad Data Grid

Как мне избавиться от одинарные кавычки вокруг имен столбцов? Я попытался вытащить их в предложении "in", и я получаю ошибку:

in (Fred,John,Jane)

Error message

Я также попытался заменить одинарные кавычки на двойные кавычки и получил ту же ошибку. Я не знаю, является ли это опцией Oracle, которую мне нужно установить/отменить перед запуском моего запроса или жабы.

1 ответов


вы можете предоставить псевдонимы для новых столбцов в предложении '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)
      )

а также для вашего предложения aggregate, которое необходимо, если у вас есть несколько предложений..

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

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

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's Sum", FRED_ITMCNT "Fred's Count"
     , JOHN_ITMSUM "John's Sum", JOHN_ITMCNT "John's Count"
     , JANE_ITMSUM "Janes's Sum", JANE_ITMCNT "Janes's Count"
from testdata
pivot (
    sum(Items) itmsum,
    count(Items) itmcnt
    for First_Name
    in ('Fred' as fred,'John' as john,'Jane' as jane)
   )

дает

Fred's Sum Fred's Count John's Sum John's Count Janes's Sum Janes's Count
---------- ------------ ---------- ------------ ----------- -------------
        25            2          5            1          12             1