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;