Ada pertanyaan serupa di sini ,di sini dijawab di stackoverflow.
Anda perlu menggunakan operator PIVOT dalam permintaan Anda untuk mencapai ini. Berikut adalah contoh dan penjelasan tentang bagaimana Anda dapat melakukannya. Contoh ini dirujuk dari ini sumber.
---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ( '+ @cols +' ))
AS pvt;'
EXECUTE(@query)
Penjelasan
1.Bagian pertama dari kueri
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
memberi Anda hasil rata yang bagus dari nilai kolom Nama Anda dalam satu baris sebagai berikut
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
Anda dapat mempelajari lebih lanjut tentang STUFF dan XML PATH di sini dan di sini .
2.SELECT + @cols + FROM
akan memilih semua baris sebagai nama kolom untuk kumpulan hasil akhir (pvt - langkah 3)
yaitu
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3.Kueri ini menarik semua baris data yang kita perlukan untuk membuat hasil tab silang. (p) setelah kueri membuat tabel sementara dari hasil yang kemudian dapat digunakan untuk memenuhi kueri untuk langkah 1.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4. Ekspresi PIVOT
PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt
melakukan peringkasan yang sebenarnya dan menempatkan hasilnya ke dalam tabel sementara yang disebut pvt sebagai
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76