Es gibt ähnliche Fragen here, here in Stackoverflow beantwortet.
Sie müssen die Betreiber PIVOT in Ihrer Abfrage verwenden, um acheive this.Here ist das Beispiel und Erklärung, wie Sie that.The Beispiel tun können von this Quelle verwiesen wird.
---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)
Erklärung
1.Die erster Teil der Abfrage
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
gibt Ihnen ein schönes abgeflachte Ergebnis Ihrer Spalte Namen Werte in einer einzigen Zeile als
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
folgen
Sie können lea rn mehr über die STUFF und XML PATH here und here.
2. SELECT + @cols + FROM
werden alle Zeilen als coloumn Namen für das Endergebnis Satz auswählen (pvt - Schritt 3)
d.h
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3.Diese Abfrage ruft alle Datenzeilen ab, die zum Erstellen der Kreuztabellenergebnisse erforderlich sind. Die (p) nach der Abfrage wird eine temporäre Tabelle der Ergebnisse erstellen, die dann verwendet werden können, um die Abfrage für Schritt zu erfüllen 1.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4.The pivot Ausdruck
PIVOT (MAX (Count) FOR Name IN (@cols) AS pvt
führt die eigentlichen Zusammenfassung und stellt die Ergebnisse in eine temporäre Tabelle pvt als
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76
+1, großartige Lösung und Antwort. Beachten Sie, dass die "TOP 100 PROZENT" in "TOP 30" oder was auch immer geändert werden kann, so dass Sie die Anzahl der Spalten nicht überschreiten, wenn Sie viele Zeilen haben. –