sql >> Database >  >> RDS >> Sqlserver

Hoe zet ik rijen om in kolommen in sql server 2005

Er zijn hier soortgelijke vragen ,hier beantwoord in stackoverflow.

U moet de operator PIVOT gebruiken in uw zoekopdracht om dit te bereiken. Hier is het voorbeeld en de uitleg over hoe u dat kunt doen. Naar het voorbeeld wordt verwezen vanuit dit bron.

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

Uitleg

1.Het eerste deel van de zoekopdracht

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

geeft u een mooi afgeplat resultaat van uw naamkolomwaarden in een enkele rij als volgt

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

Je kunt hier en hier .

2.SELECT + @cols + FROM selecteert alle rijen als kolomnamen voor de uiteindelijke resultaatset (pvt - stap 3)

d.w.z.

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

3.Deze query haalt alle rijen met gegevens op die we nodig hebben om de kruistabelresultaten te maken. De (p) na de query maakt een tijdelijke tabel met de resultaten die vervolgens kan worden gebruikt om te voldoen aan de query voor stap 1.

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

4.De PIVOT-uitdrukking

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

doet de eigenlijke samenvatting en plaatst de resultaten in een tijdelijke tabel met de naam pvt als

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


  1. Hoe vergrendel ik lezen/schrijven naar MySQL-tabellen zodat ik kan selecteren en vervolgens kan invoegen zonder dat andere programma's de database lezen/schrijven?

  2. Kan geen verbinding maken met lokale MySQL-server via socket '/var/mysql/mysql.sock' (38)

  3. Hoe te kiezen uit twee tabellen in MySQL, zelfs als niet alle rijen in de ene tabel correspondenten hebben in de andere?

  4. Bool-waarde instellen in SQL