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

Jak utworzyć tabelę przestawną w Transact/SQL?

Musisz użyć PIVOT . Możesz użyć STATIC PIVOT, w którym znasz wartości kolumn do przekształcenia, lub DYNAMIC PIVOT, gdy kolumny są nieznane do czasu wykonania.

Statyczny obrót (Zobacz SQL Fiddle z wersją demonstracyjną ):

select *
from 
(
    select memid, Condition_id, Condition_Result
    from t
) x
pivot
(
    sum(condition_result)
    for condition_id in ([C1], [C2], [C3], [C4])
) p

Dynamiczny obrót (Zobacz Skrzypce SQL z wersją demonstracyjną ):

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

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


set @query = 'SELECT memid, ' + @cols + ' from 
            (
                select MemId, Condition_id, condition_result
                from t
           ) x
            pivot 
            (
                sum(condition_result)
                for condition_id in (' + @cols + ')
            ) p '


execute(@query)

Oba wygenerują te same wyniki.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać określoną liczbę znaków z lewej lub prawej strony ciągu w SQL Server?

  2. Znajdź datę ostatniej modyfikacji/wdrożenia pakietu SSIS — SQL Server

  3. Jak znaleźć wyłączony indeks na serwerze SQL 2008?

  4. Obliczanie różnicy czasu w SQL Server

  5. Jak zaimplementować asocjacje polimorficzne w istniejącej bazie danych