对Oracle Pivot结果进行分组

时间:2017-08-04 15:09:26

标签: oracle plsql

我有以下查询

SELECT * FROM tblCommissionNew
PIVOT(Sum(cost)
for stage in (1,2,3))
where quote_id=207

这会产生2行,因为阶段1和2中有值。

当前输出

COMMISSIONID    CONSUMPTION QUOTE_ID    CALC_DATE   COMM_PAID   STATEMENT_ID    COMM_PAY_DATE   1       2       3
    449         9560        207         06-FEB-17   N           5                               38.24       
    95010       4780        207         30-JUN-17               2472                                            19.12

(抱歉不确定如何正确格式化)

是否可以将这些结果分组,因此我的输出可能是

Quote ID / Stage 1 / Stage 2 / Stage 3
207 / 32.77 / 44.98 / null

2 个答案:

答案 0 :(得分:1)

枢轴本质上是一种分组。这里的问题是你要保留COMMISSIONID的所有列,每行不同。您没有放入枢轴中的任何内容,但您在select语句中包含的内容将被分组。修复代码所需要做的就是在旋转之前先从表中获取所需的列。在下面的示例中,我首先获取QUOTE_ID,STAGE和COST,然后在旋转之前将其包装在select语句中。

with tblCommissionNew as
(select 449 COMMISSIONID,9560 CONSUMPTION, 207 quote_id, '06-FEB-17' CALC_DATE, 'N' COMM_PAID, 1 stage, 32.77 cost from dual
    union all
 select 95010, 4780, 207,'30-JUN-17',null, 2, 44.98 from dual
)

select * from(
select QUOTE_ID, STAGE, COST
from tblCommissionNew
)
pivot(sum(cost)
for stage in (1,2,3)) A
where quote_id = 207

输出:

QUOTE_ID    1       2       3
207         32.77   44.98   

答案 1 :(得分:0)

首先消除您不感兴趣的列并制作轴:

select * 
  from (select quote_id, stage, cost from tblCommissionNew where quote_id = 207) 
  pivot(sum(cost) for stage in (1,2,3))