Der er lignende spørgsmål her ,her besvaret i stackoverflow.
Du skal bruge operatoren PIVOT i din forespørgsel for at opnå dette. Her er eksemplet og forklaringen på, hvordan du kan gøre det. Eksemplet er refereret fra dette kilde.
---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)
Forklaring
1. Den første del af forespørgslen
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
giver dig et flot fladt resultat af dine navnekolonneværdier i en enkelt række som følger
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
Du kan lære mere om STUFF og XML PATH her og her .
2.SELECT + @cols + FROM
vil vælge alle rækkerne som kolonnenavne for det endelige resultatsæt (pvt - trin 3)
dvs.
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3. Denne forespørgsel trækker alle de rækker af data, som vi har brug for for at skabe krydstabulatorresultaterne. (p) efter forespørgslen opretter en midlertidig tabel over resultaterne, som derefter kan bruges til at opfylde forespørgslen for trin 1.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4. PIVOT-udtrykket
PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt
laver selve opsummeringen og sætter resultaterne i en midlertidig tabel kaldet pvt as
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76