sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan omdanner jeg rækker til kolonner i sql server 2005

Der er lignende spørgsmål her ,her besvaret i stackoverflow.

Du skal bruge operatoren PIVOT i din forespørgsel for at opnå dette. Her er eksemplet og forklaringen på, hvordan du kan gøre det. Eksemplet er refereret fra dette kilde.

---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)

Forklaring

1. Den første del af forespørgslen

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                        '],[' + t.Name
                FROM TESTTABLE AS t
                ORDER BY '],[' + t.Name
                FOR XML PATH('')
              ), 1, 2, '') + ']'
 

giver dig et flot fladt resultat af dine navnekolonneværdier i en enkelt række som følger

[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]  
 

Du kan lære mere om STUFF og XML PATH her og her .

2.SELECT + @cols + FROM vil vælge alle rækkerne som kolonnenavne for det endelige resultatsæt (pvt - trin 3)

dvs.

Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt] 
 

3. Denne forespørgsel trækker alle de rækker af data, som vi har brug for for at skabe krydstabulatorresultaterne. (p) efter forespørgslen opretter en midlertidig tabel over resultaterne, som derefter kan bruges til at opfylde forespørgslen for trin 1.

(SELECT t1.Name, t1.Count FROM  TESTTABLE AS t1) p
 

4. PIVOT-udtrykket

PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt
 

laver selve opsummeringen og sætter resultaterne i en midlertidig tabel kaldet pvt as

Chery | Drew | Morgon | Kath | Kirk | Matt  
-------------------------------------------  
257     1500     13      500    200    76
 


  1. Hvordan kan jeg bruge mySQL replace() til at erstatte strenge i flere poster?

  2. MySQL-lagringstid - datatype?

  3. SQL Server Process Queue Race Condition

  4. Kunne ikke indlæse filen eller assembly 'MySql.Data, Version=6.2.2.0