2017-08-04 61 views
0

我有以下查询分组甲骨文枢轴导致

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 
+0

,你能否告诉我们原来的行?当我刚创建一个表格并插入两行这些值时,我会得到您想要的确切输出。 –

+0

@PatrickH编辑 – user1936588

回答

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 
0

起初消除列你不感兴趣,使支点:

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