Oracle 透视查询结果问题

Oracle 透视查询结果问题,oracle,pivot,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 7

下面的查询

    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    - 
透视查询

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         
)

有什么问题吗?

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;

尝试在您的表中添加唯一的列。

我没有看到问题,它在实际透视之前被
mealpanelty
(4和-)分为两个子集。结果与预期的一样,您要求的是一个日期的最大工作时数,按员工和mealpanelty分组。因此,每个EMployee/mealpanelty组合只有一行是正常的。如果这不是你想要的,你应该发布你想要的结果的数据样本achieve@Koshinae所以您建议重新编写查询。跳过mealpanelty列,如果可以的话。@Koshinae如果我删除它,那么只会显示单行。我需要自动化而不是静态值。您期望的结果是什么?所有五行显示都会以透视显示,就像单个查询一样。在透视过程中似乎有数据分组。在我的示例中,我向您展示了透视的功能。如果需要5行,请为每行添加唯一的值。
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;