ale*_*ero 3 sql t-sql sql-server sql-server-2008
我有此查询工作:
select cap_idPlanoContasFin , [3684],[2234],[2] ,
from
(
select cap_idPlanoContasFin,cap_idempresa,sum(cap_valorfatura)
as Stotal
from erp_ContasPagar
group by cap_idPlanoContasFin , cap_idEmpresa
) as sourcetable
pivot
(sum(Stotal)for cap_idEmpresa in ([3684],[2234],[2])
)as pivottable;
Run Code Online (Sandbox Code Playgroud)
该查询返回:
cap_idPlanoContasFin 3684 2234 2
3 9000 NULL NULL
10 1057840,68 NULL 1865081,35
11 NULL 7283,1 591,9
12 NULL NULL 178914,45
13 9305,07 1117,6 500
14 NULL 59333,5 34611,74
Run Code Online (Sandbox Code Playgroud)
我想在水平总计示例中输入相同的查询:
cap_idPlanoContasFin 3684 2234 2 Total
---------------------------------------------------------------------
13 9305,07 1117,6 500 10922,67
Run Code Online (Sandbox Code Playgroud)
怎么做?我已经读过一些东西UNION
。
首先,您不需要事先对数据进行分组:PIVOT子句将为您完成此操作。因此,您可以删除GROUP BY子句并相应地SUM()
在PIVOT中更改的参数:
select cap_idPlanoContasFin, [3684], [2234], [2]
from
(
select cap_idPlanoContasFin, cap_idempresa, cap_valorfatura
from erp_ContasPagar
group by cap_idPlanoContasFin , cap_idEmpresa
) as sourcetable
pivot
(
sum(cap_valorfatura) for cap_idEmpresa in ([3684], [2234], [2])
) as pivottable;
Run Code Online (Sandbox Code Playgroud)
要添加总计列,可以使用如下所示的窗口 SUM()
:
select cap_idPlanoContasFin, [3684], [2234], [2], Total
from
(
select cap_idPlanoContasFin, cap_idempresa, cap_valorfatura,
sum(cap_valorfatura) over (partition by cap_idPlanoContasFin) as Total
from erp_ContasPagar
) as sourcetable
pivot
(
sum(cap_valorfatura) for cap_idEmpresa in ([3684], [2234], [2])
) as pivottable;
Run Code Online (Sandbox Code Playgroud)
但是请注意,如果您sourcetable
包含的行的cap_idEmpresa
值不同于PIVOT子句中列出的cap_valorfatura
值,则也会将相应的值相加。因此,您可能需要sourcetable
在透视之前过滤行集,如下所示:
select cap_idPlanoContasFin, [3684], [2234], [2], Total
from
(
select cap_idPlanoContasFin, cap_idempresa, cap_valorfatura,
sum(cap_valorfatura) over (partition by cap_idPlanoContasFin) as Total
from erp_ContasPagar
where cap_idempresa in (3684, 2234, 2)
) as sourcetable
pivot
(
sum(cap_valorfatura) for cap_idEmpresa in ([3684], [2234], [2])
) as pivottable;
Run Code Online (Sandbox Code Playgroud)