Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przestawne kolumny dynamiczne, bez agregacji

Tak, możesz wykonać dynamiczny obrót. Czasami łatwiej jest wypracować PIVOT zapytanie, używając najpierw wersji statycznej, aby można było zobaczyć, jak będzie wyglądać zapytanie i wyniki. Następnie przekształć zapytanie w wersję dynamiczną.

Oto przykład statycznej i dynamicznej wersji zapytania:

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

Dynamiczny (Skrzypce SQL ):

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)

Jeśli możesz podać więcej szczegółów dotyczących obecnej struktury tabeli, a następnie kilka przykładowych danych. Powinniśmy być w stanie pomóc Ci w stworzeniu wersji potrzebnej w Twojej sytuacji.

Jak już wspomniałem, czasami łatwiej jest zacząć od wersji statycznej, w której na stałe wpisujesz kolumny, które musisz najpierw przekształcić, a następnie przechodzisz do wersji dynamicznej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mierzysz wydajność programu SQL Server za pomocą tych wskaźników?

  2. Wygeneruj losową liczbę, której nie ma w tabeli na serwerze sql

  3. Entity Framework 6 — zapytania dotyczące czasu

  4. Importuj plik CSV do SQL Server

  5. Różnica między datą i godziną w sqlserver?