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

Jak przestawić dane z jednej tabeli za pomocą serwera SQL 2005

Można to zrobić całkiem łatwo za pomocą PIVOT funkcjonować. Ponieważ druga odpowiedź nie pokazuje kodu powiązanego z tym, jak to zrobić, oto dwa sposoby na PIVOT dane.

Pierwszy to statyczny obrót . Statyczny obrót ma miejsce wtedy, gdy znasz dane z wyprzedzeniem, aby przekształcić je w kolumny.

select *
from 
(
    select name, id, convert(char(5), dt, 101) dt, jobid, amount
    from test
) x
pivot
(
    sum(amount)
    for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
)p
order by jobid, name

Zobacz SQL Fiddle z wersją demonstracyjną

Drugim sposobem jest użycie dynamicznego PIVOT do identyfikowania w czasie wykonywania wartości, które mają zostać przeniesione do kolumn.

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101)) 
                    from test
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT name, id, ' + @cols + ', jobid from 
             (
                select  name, id, convert(char(5), dt, 101) dt, jobid, amount
                from test
            ) x
            pivot 
            (
                sum(amount)
                for dt in (' + @cols + ')
            ) p 
            order by jobid, name'

execute(@query)

Zobacz SQL Fiddle z wersją demonstracyjną

Oba przyniosą takie same wyniki. Dynamiczny działa świetnie, gdy nie znasz z wyprzedzeniem wartości do konwersji na kolumny.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql nadrzędne drzewo potomne z porządkiem sortowania

  2. Dlaczego kwerenda Microsoft SQL Server 2012 zajmuje kilka minut w porównaniu z JDBC 4.0, ale sekundy w Management Studio?

  3. Nieprawidłowy numer parametru, stan SQL S1093 php odbc mssql

  4. Instrukcja SQL LIKE dotycząca typu DateTime

  5. Ciąg połączenia dla SQL Server Express na zdalnym komputerze Błąd logowania nie powiodło się