Ähnliche Fragen gibt es hier , hier im Stapelüberlauf beantwortet.
Sie müssen den Operator PIVOT verwenden in Ihrer Abfrage, um dies zu erreichen. Hier ist das Beispiel und eine Erklärung, wie Sie das tun können. Auf das Beispiel wird verwiesen von hier Quelle.
---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.Der erste 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 nettes abgeflachtes Ergebnis Ihrer Name-Spaltenwerte in einer einzelnen Zeile wie folgt
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
Weitere Informationen zu STUFF und XML PATH finden Sie hier und hier .
2.SELECT + @cols + FROM
wählt alle Zeilen als Spaltennamen für die endgültige Ergebnismenge aus (pvt - Schritt 3)
d.h.
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3.Diese Abfrage ruft alle Datenzeilen ab, die wir zum Erstellen der Kreuztabellenergebnisse benötigen. Das (p) nach der Abfrage erstellt eine temporäre Tabelle der Ergebnisse, die dann verwendet werden kann, um die Abfrage für Schritt 1 zu erfüllen.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4.Der PIVOT-Ausdruck
PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt
führt die eigentliche Zusammenfassung durch und legt die Ergebnisse in einer temporären Tabelle namens pvt als
abChery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76