我有以下查询
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 :(得分: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))