sql >> Database >  >> RDS >> Sqlserver

Gegevens uit één tabel draaien met SQL Server 2005

Dit kan eigenlijk vrij eenvoudig worden gedaan met een PIVOT functie. Aangezien het andere antwoord niet de code toont die hoort bij het uitvoeren ervan, zijn hier twee manieren om te PIVOT de data.

De eerste is met een Statische Pivot . Een statische spil is wanneer u de gegevens van tevoren weet om in kolommen te veranderen.

select *
from 
(
    select name, id, convert(char(5), dt, 101) dt, jobid, amount
    from test
) x
pivot
(
    sum(amount)
    for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
)p
order by jobid, name

Zie SQL Fiddle met demo

De tweede manier is door een Dynamic PIVOT . te gebruiken om tijdens runtime de waarden te identificeren die naar kolommen moeten worden omgezet.

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101)) 
                    from test
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT name, id, ' + @cols + ', jobid from 
             (
                select  name, id, convert(char(5), dt, 101) dt, jobid, amount
                from test
            ) x
            pivot 
            (
                sum(amount)
                for dt in (' + @cols + ')
            ) p 
            order by jobid, name'

execute(@query)

Zie SQL Fiddle met demo

Beide zullen dezelfde resultaten opleveren. De Dynamic werkt geweldig als u de waarden niet van tevoren weet om naar kolommen te converteren.




  1. Hoe gebruik je mysqldump voor een deel van een tafel?

  2. Problemen oplossen Geen dergelijk bestand of map bij het uitvoeren van `php app/console doctrine:schema:create`

  3. Mysql:gegevens verwisselen voor verschillende rijen

  4. Gebruik SERVERPROPERTY() om serverinformatie op te halen in SQL Server