透视 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
如果这不起作用,请告诉我。
我尝试了通过搜索找到的各种示例,但似乎无法获得我需要的结果。
我有以下代码
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
如果这不起作用,请告诉我。