Mungkin ada berbagai pendekatan untuk ini. Anda dapat menghitung semua total setelah pivot, atau Anda bisa mendapatkan totalnya terlebih dahulu, lalu memutar semua hasilnya. Dimungkinkan juga untuk memiliki semacam jalan tengah:dapatkan satu jenis total (misalnya yang berdasarkan baris), pivot, lalu dapatkan jenis lainnya, meskipun itu mungkin berlebihan.
Pendekatan pertama yang disebutkan, mendapatkan semua total setelah pivot, dapat dilakukan dengan cara yang sangat mudah, dan satu-satunya hal yang berpotensi baru bagi Anda dalam implementasi di bawah ini mungkin 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)
;
Pada dasarnya, GROUP BY ROLLUP()
bagian menghasilkan Total baris untukmu. Pengelompokan pertama dilakukan oleh environment_name
, lalu baris total keseluruhan ditambahkan.
Untuk melakukan sebaliknya, yaitu mendapatkan total sebelum berputar, Anda dapat menggunakan GROUP BY CUBE()
seperti ini:
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
;
Kedua metode dapat diuji dan dimainkan di SQL Fiddle:
Catatan. Saya telah menghilangkan langkah unpivoting di kedua saran karena unpivoting satu kolom tampak jelas berlebihan. Namun, jika ada lebih dari itu, menyesuaikan salah satu kueri seharusnya mudah.