Penjelasan kueri pivot
FROM
(SELECT OtherID, Val, amount
FROM @randomTable) p
Ini adalah kolom yang menjadi "data dasar" untuk pivot. Jangan sertakan kolom yang tidak melakukan apa pun. Sama seperti Anda tidak memasukkan kolom non-GROUP BY ke dalam klausa SELECT, Anda juga tidak mencantumkan kolom yang tidak digunakan dalam sumber PIVOT.
PIVOT
(
max(amount)
FOR Val IN (Val1, Val2, Val3, Val4, Val5)
) AS PivotTable;
Bagian ini mengatakan bahwa Anda membuat 5 kolom baru bernama "Val1" hingga "Val5". Nama kolom ini mewakili nilai di kolom Val. Jadi diharapkan tabel Anda akan berisi sesuatu seperti ini
otherID Val amount
1 Val1 1
2 Val2 2
1 Val3 3
1 Val1 5
(etc) (this column contains one of Val1 - Val5, or null)
Jadi Anda sekarang memiliki 5 kolom baru yang sebelumnya tidak ada. Apa yang masuk ke kolom?
- Setiap kolom yang muncul di OUTPUT yang bukan kolom PIVOT adalah kolom "GROUP BY".
- Fungsi agregat adalah yang mengumpulkan semua data ke dalam sel yang merupakan CROSS antara kolom GROUP BY dan kolom PIVOTED.
Jadi, untuk mengilustrasikannya, dengan menggunakan contoh data di atas, kita memiliki otherID=1 dan val=Val1. Di tabel keluaran, hanya ada satu sel yang mewakili kombinasi Maks(jumlah) ini untuk setiap kombinasi (ID lain/val)
otherID Val1 Val2 Val3 Val4 Val5
1 <x> ... ... ... ...
(etc)
Untuk sel bertanda <x>
, hanya satu nilai yang diperbolehkan, jadi <x>
tidak boleh berisi beberapa amount
nilai-nilai. Itulah alasan mengapa kita perlu menggabungkannya, dalam hal ini menggunakan MAX(amount)
. Jadi sebenarnya, outputnya seperti ini
(unpivoted columns) (pivoted, creates "new" columns)
otherID | Val1 Val2 Val3 Val4 Val5
1 | MAX(amount) Max(amount) << cell value = aggregate function
(etc)
Pernyataan SELECT adalah yang kemudian menampilkan kolom-kolom ini
SELECT OtherID, Val1, Val2, Val3, Val4, Val5