Du forsøger at PIVOT
dataene. SQL-serveren har en PIVOT funktion, der kan udføre dette for dig. For at udføre PIVOT du skal beslutte, hvilken aggregeret funktion du skal bruge. I mit eksempel brugte jeg MAX() men du kan bruge SUM() osv.
Hvis du ikke har en pivotfunktion, kan du bruge en aggregeret funktion med en CASE erklæring for at gøre dette.
Aggregeret/CASE-version: Denne version kræver, at du hårdkoder alle navnene i kolonnerne.
vælg max(case when name ='Engineering' then rating end) Engineering, max(case when name ='Financials' then rating end) Financials, max(case when name ='Scope' then rating end) Scope, max(case when name ='Schedule' then rating end) Schedule, max(case when name ='Risks' then rating end) Risici, max(case when name ='People' then rating end) People from your table Statisk PIVOT-version: Du vil hårdkode værdierne af navnene i denne forespørgsel
vælg *from( vælg navn, vurdering fra dit bord) srcpivot( max(rating) for navn i ([Engineering], [Financials], [Scope], [Schedule], [Risici], [People] )) piv
Ovenstående versioner fungerer godt, hvis du har et kendt antal kolonner, men hvis dit navn værdier er ukendte, så kan du bruge dynamisk sql til at PIVOT dataene.
Dynamisk PIVOT-version:
ERKLÆR @cols SOM NVARCHAR(MAX), @query AS NVARCHAR(MAX)vælg @cols =TING((SELECT distinct ',' + QUOTENAME(Name) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')set @query ='SELECT ' + @cols + ' fra (vælg navn, vurdering fra din tabel) x pivot (max(rating) ) for navn i (' + @cols + ') ) p 'execute(@query) Alle tre versioner vil give det samme resultat:
| INGENIØR | ØKONOMI | OMFANG | TIDSPLAN | RISICI | MENNESKER |------------------------------------------------ ----------------| 1 | 3 | 1 | 2 | 3 | 3 |