sql >> Databasteknik >  >> RDS >> Sqlserver

Pivot dynamiska kolumner, ingen aggregation

Ja, du kan utföra en dynamisk pivot. Ibland är det lättare att arbeta upp PIVOT fråga med en statisk version först så att du kan se hur frågan och resultaten kommer att se ut. Omvandla sedan frågan till en dynamisk version.

Här är ett exempel på en statisk kontra dynamisk version av en fråga:

Statisk (SQL-fiol ):

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

Dynamisk (SQL-fiol ):

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)

Om du kan ge mer information om din nuvarande tabellstruktur och sedan några exempeldata. Vi borde kunna hjälpa dig att skapa den version som du skulle behöva för din situation.

Men som sagt, ibland är det lättare att börja med en statisk version, där du hårdkodar i kolumnerna som du måste transformera först, och sedan går du vidare till den dynamiska versionen.




  1. Oracle:Använder subquery i en trigger

  2. php mysql - ska jag lägga till fältet kategorinamn i en tabell eller inte?

  3. Oracle PLSQL motsvarighet till ASCIISTR(N'str')

  4. Hur man väljer den sista posten från MySQL-tabellen med SQL-syntax