【发布时间】:2015-01-16 14:27:44
【问题描述】:
我正在尝试根据日期(字段 DT)按月/年旋转此表:
CREATE TABLE "TEMP"
( "NAME" VARCHAR2(20 BYTE),
"DT" DATE,
"SZ" NUMBER(10,0)
)
Insert into TEMP (NAME,DT,SZ) values ('A',to_date('16/01/15','DD/MM/RR'),'1');
Insert into TEMP (NAME,DT,SZ) values ('B',to_date('16/01/15','DD/MM/RR'),'2');
Insert into TEMP (NAME,DT,SZ) values ('C',to_date('16/01/15','DD/MM/RR'),'3');
Insert into TEMP (NAME,DT,SZ) values ('D',to_date('16/01/15','DD/MM/RR'),'4');
Insert into TEMP (NAME,DT,SZ) values ('A',to_date('10/01/15','DD/MM/RR'),'5');
Insert into TEMP (NAME,DT,SZ) values ('B',to_date('10/01/15','DD/MM/RR'),'6');
Insert into TEMP (NAME,DT,SZ) values ('C',to_date('10/01/15','DD/MM/RR'),'7');
使用这个查询:
SELECT * from
(select name, sz, dt from temp)
pivot (sum(sz) for dt in (to_date('01/2015', 'MM/YYYY') as "dt"))
我收到了这个:
NAME dt
-------------------- ----------
D
A
B
C
但是,我却得到了:
NAME dt
-------------------- ----------
D 4
A 6
B 8
C 10
我尝试了很多东西,但似乎都没有:
...
pivot (sum(sz) for dt in ('01/2015' as "dt")) --01843. 00000 - "not a valid month"
你知道我做错了什么吗?
非常欢迎任何帮助。
【问题讨论】:
-
你为什么要旋转?我看没必要,
select name, sum(sz) as dt from temp group by name不是给你你想要的吗? -
确实是一样的效果。但这是我真实数据的一个非常简单的例子。实际上,我的真实表可以有几个月/几年的几个数据和几十列。所以这在很长一段时间内(超过一个月)都行不通。我真的很感谢你的帮助:)
标签: oracle null pivot-table