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

Drej dynamiske kolonner, ingen aggregation

Ja, du kan udføre en dynamisk pivot. Nogle gange er det nemmere at oparbejde >PIVOT forespørg først ved hjælp af en statisk version, så du kan se, hvordan forespørgslen og resultaterne vil se ud. Transform derefter forespørgslen til en dynamisk version.

Her er et eksempel på en statisk vs. dynamisk version af en forespørgsel:

Statisk (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

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

Hvis du kan give flere detaljer omkring din nuværende tabelstruktur og derefter nogle eksempeldata. Vi burde være i stand til at hjælpe dig med at oprette den version, du har brug for til din situation.

Som jeg sagde dog, nogle gange er det nemmere at starte med en statisk version, hvor du hardkoder i de kolonner, som du skal transformere først, og derefter går videre til den dynamiske version.




  1. Hvordan opdaterer jeg fra en SELECT i SQL Server?

  2. Wordpress kan ikke oprette forbindelse til mysql-serveren

  3. Hvad er betydningen af ​​<> i mysql-forespørgsel?

  4. Er dette et godt DB-skema for lokationer