2015-08-31 208 views
0

我試過了各種樣本,我發現通過搜索,我似乎無法得到我需要的結果。數據透視表列總數

我有以下代碼

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

你可以嘗試下面的東西,讓我知道這是否工作。 我假設列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 

讓我知道這是行不通的。

+0

有幾個語法差異,但我得到了那些解決和使用此代碼 – Nestor

+0

酷!如果它適合你,請通過檢查答案 – Utsav

+0

左側的勾號接受答案。它不提供列總數,但行總數爲 – Nestor