sql >> Databáze >  >> RDS >> Sqlserver

Kontingenční dynamické sloupce, žádná agregace

Ano, můžete provést dynamický pivot. Někdy je jednodušší vypracovat PIVOT dotazujte nejprve pomocí statické verze, abyste viděli, jak bude dotaz a výsledky vypadat. Poté převeďte dotaz do dynamické verze.

Zde je příklad statické vs. dynamické verze dotazu:

Statické (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

Dynamický (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)

Pokud můžete poskytnout více podrobností o vaší aktuální struktuře tabulky a poté některá ukázková data. Měli bychom vám být schopni pomoci vytvořit verzi, kterou byste pro vaši situaci potřebovali.

Jak jsem však řekl, někdy je snazší začít se statickou verzí, kde napevno zakódujete sloupce, které musíte nejprve transformovat, a poté přejděte k dynamické verzi.




  1. Jak vypsat informace o všech souborech Alfresco (Postgres SQL)?

  2. Refaktoring ADO.NET – SqlTransaction vs. TransactionScope

  3. agregát postgresql json

  4. mysql delete, autoincrement