Il y a des questions similaires here, here ANSWERED stackoverflow.
Vous devez utiliser l'opérateur PIVOT dans votre requête à acheive this.Here est l'exemple et l'explication sur la façon dont vous pouvez faire that.The exemple est référencé à partir de la source this.
---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)
Explication
1. La première partie de la requête
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
vous donne un bon résultat aplaties de vos valeurs de la colonne Nom en une seule rangée comme suivre
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
Vous pouvez lea En savoir plus sur le STUFF et XML PATH here et here.
2. SELECT + @cols + FROM
sélectionnera toutes les lignes que les noms de Coloumn pour l'ensemble de résultats final (pvt - étape 3)
i.e.
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3.Cette requête extrait toutes les lignes de données dont nous avons besoin pour créer les résultats du tableau croisé. Le (P) après la demande de recherche est la création d'une table temporaire des résultats qui peuvent ensuite être utilisés pour satisfaire à la requête pour l'étape 1.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4.Le expression PIVOT
PIVOT (MAX (Count) FOR Name IN (@cols) AS pvt
fait le véritable et met les summarization résultats dans une table temporaire appelée pvt comme
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76
+1, excellente solution et réponse. notez que le 'TOP 100 PERCENT' peut être changé en' TOP 30' ou autre, donc vous ne dépassez pas le nombre de colonnes si vous avez beaucoup de lignes. –