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

Dane przestawne w T-SQL

Jeśli używasz SQL Server 2005 (lub nowszego), oto kod:

DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)

SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([Month])
                        FROM YourTable FOR XML PATH('') ), 1, 1, '') 


SET @sqlquery = 'SELECT * FROM
      (SELECT Person, Month, Paid
       FROM YourTable ) base
       PIVOT (Sum(Paid) FOR [Person]
       IN (' + @cols + ')) AS finalpivot'

EXECUTE ( @sqlquery )

To zadziała bez względu na to, ile masz różnych statusów. Dynamicznie składa zapytanie z PIVOT . Jedynym sposobem, w jaki możesz wykonać PIVOT z kolumnami dynamicznymi, jest dynamiczne składanie zapytania, co można zrobić w SQL Server.

Inne przykłady:

  • Może SQL Server PIVOT?
  • Jak zbudować podsumowanie, łącząc się z pojedynczą tabelą za pomocą SQL Server?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Maksymalny rozmiar zapytania SQL Server? Klauzula IN? Czy istnieje lepsze podejście?

  2. Pule połączeń w .NET/SQL Server?

  3. Jak wykonać zapytanie SQL bez wyświetlania wyników

  4. Użyj instrukcji Create, aby utworzyć tabelę w SQL Server — SQL Server / T-SQL Tutorial, część 34

  5. Zwróć listę wiadomości e-mail wysłanych z poczty bazy danych SQL Server (T-SQL)