Hier kunnen verschillende benaderingen voor zijn. U kunt alle totalen na de pivot berekenen, of u kunt eerst de totalen krijgen en vervolgens alle resultaten draaien. Het is ook mogelijk om een soort middenweg te hebben:pak de ene soort van de totalen (bijvoorbeeld de rijgewijze), draai dan de andere soort, hoewel dat misschien overdreven is.
De eerste van de genoemde benaderingen, het verkrijgen van alle totalen na de spil, zou op een zeer eenvoudige manier kunnen worden gedaan, en het enige dat mogelijk nieuw voor u is in de onderstaande implementatie is misschien 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)
;
Kortom, de GROUP BY ROLLUP()
part produceert de Total rij voor jou. De groepering wordt eerst gedaan door environment_name
, dan wordt de eindtotaalrij toegevoegd.
Om precies het tegenovergestelde te doen, d.w.z. de totalen te krijgen voordat u draait, kunt u GROUP BY CUBE()
gebruiken zoals dit:
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
;
Beide methoden kunnen worden getest en gespeeld bij SQL Fiddle:
Opmerking. Ik heb de ondraaibare stap in beide suggesties weggelaten omdat het ongedaan maken van een enkele kolom duidelijk overbodig leek. Als er echter meer aan de hand is, zou het aanpassen van een van de zoekopdrachten eenvoudig moeten zijn.