sql >> Database >  >> RDS >> Sqlserver

Dynamische kolommen draaien, geen aggregatie

Ja, u kunt een dynamische spil uitvoeren. Soms is het gemakkelijker om de PIVOT query eerst met een statische versie, zodat u kunt zien hoe de query en de resultaten eruit zullen zien. Zet de query vervolgens om in een dynamische versie.

Hier is een voorbeeld van een statische versus dynamische versie van een zoekopdracht:

Statisch (SQL Fiddle ):

select *
from 
(
    select u.userid,
        u.fname,
        u.lname,
        u.mobile,
        r.question,
        r.choice
    from users u
    left join results r
        on u.questionid = r.questionid
        and u.choiceid = r.choiceid
) x
pivot
(
    min(choice)
    for question in([are you], [from])
) p

Dynamisch (SQL Fiddle ):

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

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) 
            FROM results c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from 
            (
                select u.userid,
                    u.fname,
                    u.lname,
                    u.mobile,
                    r.question,
                    r.choice
                from users u
                left join results r
                    on u.questionid = r.questionid
                    and u.choiceid = r.choiceid
           ) x
            pivot 
            (
                min(choice)
                for question in (' + @cols + ')
            ) p '


execute(@query)

Als u meer details over uw huidige tabelstructuur kunt geven en vervolgens enkele voorbeeldgegevens. We zouden u moeten kunnen helpen de versie te maken die u nodig heeft voor uw situatie.

Zoals ik al zei, is het soms makkelijker om te beginnen met een statische versie, waarbij je hard codeert in de kolommen die je eerst moet transformeren, en dan doorgaat naar de dynamische versie.




  1. SQL Server - voorwaardelijke aggregatie met correlatie

  2. PostgreSQL-syntaxisfout in geparametriseerde query op datum $1

  3. Kan pg gem niet installeren in Mavericks met Postgres.app

  4. Als record bestaat, anders bijwerken Invoegen