Istnieją podobne pytania here, here odpowiedzi stackoverflow.
trzeba użyć operatora PIVOT w zapytaniu do acheive this.Here jest przykład i wyjaśnienie, w jaki sposób można zrobić that.The przykład odwołuje się od this źródła.
---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)
Wyjaśnienie
1. Pierwsza część zapytania
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
daje piękny spłaszczony wynik swoimi wartościami Nazwa kolumny w jednym rzędzie, jak postępować
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
Możesz lea więcej informacji na temat STUFF i XML PATH here i here.
2. SELECT + @cols + FROM
wybrania wszystkich wierszy jak nazwy kolumnowej błyskawicznej do końcowego zbioru wyników (PVT - krok 3)
tj
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3.Ta kwerenda pobiera wszystkie wiersze danych, które są potrzebne do utworzenia wyników w tabeli. (P) po zapytaniu tworzy tymczasowej tabeli wyników, które mogą być następnie wykorzystywane w celu zaspokojenia zapytanie w etapie 1.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4. Ekspresja ObROTOWE
PIVOT (MAX (Count) FOR Name IN (@cols) AS pvt
się właściwy podsumowania i umieszcza wyniki w tabeli tymczasowej nazwie Pvt jak
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76
+1, świetne rozwiązanie i odpowiedź. Uwaga: "TOP 100 PERCENT" można zmienić na "TOP 30" lub cokolwiek innego, więc nie przekraczasz liczby kolumn, jeśli masz dużo wierszy. –