Oracle Pivoting 返回 Month/Year 的 Null 值

Oracle Pivoting returning Null values for Month/Year

我正在尝试根据日期(字段 DT)将此 table 旋转 month/year:

  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 

我已经尝试了很多东西,但其中 none 似乎有效:

...
pivot (sum(sz) for dt in ('01/2015' as "dt")) --01843. 00000 -  "not a valid month"

你知道我做错了什么吗?

非常欢迎任何帮助。

您需要使用 TO_CHAR 而不是 TO_DATE

WITH pivotdata AS 
( 
       SELECT name, 
              sz, 
              To_char(dt, 'MM/YYYY') dt1 
       FROM   temp ) 
SELECT * 
FROM   pivotdata pivot (SUM(sz) FOR dt1 IN ('01/2015') );

这将return

NAME    '01/2015'
D   4
A   6
B   8
C   10