Er zijn hier soortgelijke vragen ,hier beantwoord in stackoverflow.
U moet de operator PIVOT gebruiken in uw zoekopdracht om dit te bereiken. Hier is het voorbeeld en de uitleg over hoe u dat kunt doen. Naar het voorbeeld wordt verwezen vanuit dit bron.
---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)
Uitleg
1.Het eerste deel van de zoekopdracht
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
geeft u een mooi afgeplat resultaat van uw naamkolomwaarden in een enkele rij als volgt
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
2.SELECT + @cols + FROM
selecteert alle rijen als kolomnamen voor de uiteindelijke resultaatset (pvt - stap 3)
d.w.z.
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3.Deze query haalt alle rijen met gegevens op die we nodig hebben om de kruistabelresultaten te maken. De (p) na de query maakt een tijdelijke tabel met de resultaten die vervolgens kan worden gebruikt om te voldoen aan de query voor stap 1.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4.De PIVOT-uitdrukking
PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt
doet de eigenlijke samenvatting en plaatst de resultaten in een tijdelijke tabel met de naam pvt als
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76