我正在尝试在Oracle中使用PIVOT,我得到了一个奇怪的结果.它可能只是我需要设置的一个选项,但我对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')
Run Code Online (Sandbox Code Playgroud)
结果如我所料,除了列名称周围有单引号(来自Toad的图片 - 如果我导出到Excel,引号会被带到Excel):

如何摆脱列名称周围的单引号?我尝试在"in"子句中取出它们,我收到一个错误:
in (Fred,John,Jane)
Run Code Online (Sandbox Code Playgroud)

我也尝试用双引号替换单引号并得到相同的错误.我不知道这是否是我需要在运行查询或Toad之前设置/取消设置的Oracle选项.
Sho*_*ace 46
您可以在"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)
)
Run Code Online (Sandbox Code Playgroud)
还有你的聚合条款,如果你有多个条款,这是必要的..
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)
)
Run Code Online (Sandbox Code Playgroud)
回报
FRED_ITMSUM FRED_ITMCNT JOHN_ITMSUM JOHN_ITMCNT JANE_ITMSUM JANE_ITMCNT
----------- ----------- ----------- ----------- ----------- -----------
25 2 5 1 12 1
Run Code Online (Sandbox Code Playgroud)
当然,你可以完全循环并使用标准的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)
)
Run Code Online (Sandbox Code Playgroud)
给
Fred's Sum Fred's Count John's Sum John's Count Janes's Sum Janes's Count
---------- ------------ ---------- ------------ ----------- -------------
25 2 5 1 12 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32762 次 |
| 最近记录: |