Може да има различни подходи към това. Можете да изчислите всички общи суми след осевата точка или можете първо да получите общите суми, след което да завъртите всички резултати. Възможно е също така да има средно положение:вземете един вид общи суми (напр. тези по редове), завъртете, след това вземете другия вид, въпреки че това може да е прекалено.
Първият от споменатите подходи, получаване на всички суми след осевата точка, може да се направи по много ясен начин и единственото нещо, което е потенциално ново за вас в долната реализация може да бъде GROUP BY ROLLUP()
:
SELECT
[ ] = ISNULL(environment_name, 'Total'),
[Enviro] = SUM([Enviro]),
[Requi] = SUM([Requi]),
[Dev] = SUM([Dev]),
[Tsc] = SUM([Tsc]),
[TD] = SUM([TD]),
[Unkn] = SUM([Unkn]),
Total = SUM([Enviro] + [Requi] + [Dev] + [Tsc] + [TD] + [Unkn])
FROM (
SELECT environment_name, root_cause
FROM test1
) s
PIVOT (
COUNT(root_cause)
FOR root_cause IN ([Enviro], [Requi], [Dev], [Tsc], [TD], [Unkn])
) p
GROUP BY
ROLLUP(environment_name)
;
По принцип GROUP BY ROLLUP()
част създава реда за обща сума за теб. Групирането първо се извършва от environment_name
, тогава редът с общата сума се добавя.
За да направите точно обратното, т.е. да получите сумите преди завъртане, можете да използвате GROUP BY CUBE()
като това:
SELECT
[ ] = environment_name,
[Enviro] = ISNULL([Enviro], 0),
[Requi] = ISNULL([Requi] , 0),
[Dev] = ISNULL([Dev] , 0),
[Tsc] = ISNULL([Tsc] , 0),
[TD] = ISNULL([TD] , 0),
[Unkn] = ISNULL([Unkn] , 0),
Total = ISNULL(Total , 0)
FROM (
SELECT
environment_name = ISNULL(environment_name, 'Total'),
root_cause = ISNULL(root_cause, 'Total'),
cnt = COUNT(*)
FROM test1
WHERE root_cause IS NOT NULL
GROUP BY
CUBE(environment_name, root_cause)
) s
PIVOT (
SUM(cnt)
FOR root_cause IN ([Enviro], [Requi], [Dev], [Tsc], [TD], [Unkn], Total)
) p
;
И двата метода могат да бъдат тествани и използвани в SQL Fiddle:
Забележка. Пропуснах стъпката за премахване на завъртането и в двете предложения, защото премахването на завъртането на една колона изглеждаше очевидно излишно. Ако обаче има нещо повече, коригирането на която и да е от заявките трябва да е лесно.