透视 table 与列总计

Pivot table with column totals

我尝试了通过搜索找到的各种示例,但似乎无法获得我需要的结果。

我有以下代码

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

并创建以下枢轴 table

CR_RDate    PO_Num  CR_Amt      RepName     CS_ID   Cat1    Cat2    Cat3
8/24/2015   166090  0.00     Agent 1     2   NULL    .00  NULL
8/24/2015   166090  0.00     Agent 2     3   NULL    NULL    .50 
8/24/2015   166090  0.00     Agent 3     3   NULL    NULL    .50 
8/24/2015   2528968 0.00     Agent 1     2   NULL    .00  NULL
8/24/2015   2528968 0.00     Agent 2     3   NULL    NULL    .00 
8/24/2015   2528968 0.00     Agent 3     3   NULL    NULL    .00 
8/31/2015   166090  0.00     Agent 1     2   NULL    .00  NULL
8/31/2015   166090  0.00     Agent 2     3   NULL    NULL    .00 
8/31/2015   166090  0.00     Agent 3     3   NULL    NULL    .00

我需要的是 Cat1、Cat2 和 Cat3 的总数。理想情况下,我可以通过 CR_Date 和 PO_Num.

获得小计

然后我需要将其放入 table 或可以在网站上展示的内容。

感谢您的帮助。

你能试试下面这样的方法吗?如果可行,请告诉我。 我假设列 Cat1、Cat2 和 Cat3 是 varchar。

我在 CTE 中使用了您的查询并从 Cat 列中删除了“$”。然后我把他们的总和连接起来,并连接了“$”符号。 add/remove 在 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

如果这不起作用,请告诉我。