PIVOT查询结果问题

时间:2016-03-16 07:48:11

标签: oracle pivot

以下查询

    SELECT pdate,empno, eNAME,
            workhrs,mealpanelty 
    from PRODUCTIVITY p,PRODUCTIVITYd d, emp e 
    where p.PRODUCTIVITYID=d.PRODUCTIVITYID and e.empno=p.employeeid

作为

的效果很好
PDATE   EMPNO   ENAME   WORKHRS MEALPANELTY
03/08/2016  7698    BLAKE   50      4
03/08/2016  7698    BLAKE   7.58    -
03/08/2016  7698    BLAKE   8.12    -
03/08/2016  7698    BLAKE   7.34    -
03/08/2016  7698    BLAKE   8.02    - 

PIVOT 查询

WITH pivot_data AS (
            SELECT pdate,empno, eNAME,
                   workhrs,mealpanelty  
            from PRODUCTIVITY p,PRODUCTIVITYd d, emp e 
            where p.PRODUCTIVITYID=d.PRODUCTIVITYID and e.empno=p.employeeid
            )
    SELECT *
    FROM   pivot_data
    PIVOT (
              max(workhrs)        --<-- pivot_clause
          FOR pdate --<-- pivot_for_clause

         IN  ('03/08/2016')    --<-- pivot_in_clause         
)

结果只有两行

EMPNO   ENAME   MEALPANELTY '03/08/2016'
7698    BLAKE   -           8.12
7698    BLAKE   4           50

可能是什么问题?

1 个答案:

答案 0 :(得分:-1)

Pivot做这样的事情。

with pivot_data (PDATE,   EMPNO,   ENAME,   WORKHRS, MEALPANELTY) as 
(
select '03/08/2016','7698','BLAKE',50,4  from dual union all
select '03/08/2016','7698','BLAKE',7.58,null from dual union all   
select '03/08/2016','7698','BLAKE',8.12,null  from dual union all  
select '03/08/2016','7698','BLAKE',7.34,null  from dual union all  
select '03/08/2016','7698','BLAKE',8.02,null  from dual)      
select EMPNO,ENAME,MEALPANELTY
 ,case when PDATE ='03/08/2016' then max(WORKHRS)end --list of value  from in(  IN  ('03/08/2016')  )  

 from pivot_data
 group by  PDATE,EMPNO,ENAME,MEALPANELTY;

尝试在表格中添加唯一列。