我尝试过通过搜索找到的各种样本,但我似乎无法得到我需要的结果。
我有以下代码
SELECT * FROM
(
SELECT CR_RDate, PO_Num, RepName, CP_Amt, CS_ID, CS_Desc FROM dbo.v_CommRP
) as
PIVOT
(
SUM(CP_Amt)
FOR CS_Desc IN ([Cat1], Cat2], [Cat3])
) AS pv_CPR
ORDER BY CR_RDate, PO_Num, CS_ID
它会创建以下数据透视表
CR_RDate PO_Num CR_Amt RepName CS_ID Cat1 Cat2 Cat3
8/24/2015 166090 $100.00 Agent 1 2 NULL $35.00 NULL
8/24/2015 166090 $100.00 Agent 2 3 NULL NULL $32.50
8/24/2015 166090 $100.00 Agent 3 3 NULL NULL $32.50
8/24/2015 2528968 $200.00 Agent 1 2 NULL $70.00 NULL
8/24/2015 2528968 $200.00 Agent 2 3 NULL NULL $65.00
8/24/2015 2528968 $200.00 Agent 3 3 NULL NULL $65.00
8/31/2015 166090 $200.00 Agent 1 2 NULL $70.00 NULL
8/31/2015 166090 $200.00 Agent 2 3 NULL NULL $65.00
8/31/2015 166090 $200.00 Agent 3 3 NULL NULL $65.00
我需要的是Cat1,Cat2和Cat3的总数。理想情况下,我可以通过CR_Date和PO_Num获得小计。
然后我需要把它放在一张桌子或可以在网站上展示的东西上。
感谢您的协助。
答案 0 :(得分:0)
你可以试试下面这样的东西,让我知道这是否有效。 我假设列Cat1,Cat2和Cat3是varchar。
我在CTE中使用了您的查询,并从Cat列中删除了'$'。然后我拿出他们的总和,并连接'$'符号。这个添加/删除在Oracle 12c中运行良好。
with pv as
(
SELECT * FROM
(
SELECT CR_RDate, PO_Num, RepName, CP_Amt, CS_ID, CS_Desc FROM dbo.v_CommRP
) as
PIVOT
(
SUM(CP_Amt)
FOR CS_Desc IN ([Cat1], Cat2], [Cat3])
) AS pv_CPR
ORDER BY CR_RDate, PO_Num, CS_ID
)
select pv.*, '$'||cast(replace(coalesce(Cat1,'0'),'$','')+replace(coalesce(Cat2,'0'),'$','')+replace(coalesce(Cat3,''),'$','0') as varchar2(20)) as Total
from pv
如果这不起作用,请告诉我。