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

Zapytanie t-sql między tabelą zdarzeń a zakresem dat

To, czego szukasz, jest powszechnie nazywane zapytaniem krzyżowym. Jeśli pytasz, jak utworzyć zapytanie krzyżowe z statycznym listę kolumn, możesz zrobić coś takiego:

Select Title
    , Min( Case When DatePart(mm, [Date]) = 7 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Jul-10]
    , Min( Case When DatePart(mm, [Date]) = 8 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Aug-10]   
    , Min( Case When DatePart(mm, [Date]) = 9 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Sep-10]       
    ...
From Table
Where [Date] Between @StartDate And @EndDate
Group By Title

Podobnie możesz użyć funkcji PIVOT sugerowanej przez Broken Link. Jednak zarówno powyższe rozwiązanie, jak i funkcja PIVOT opierają się na statycznym deklaracje kolumn. Jeśli chcesz mieć dynamiczną listę kolumn (czyli dynamiczną tabelę przestawną), to wykraczasz poza granice tego, do czego przede wszystkim zaprojektowano T-SQL. To możliwe z jakimś dziwnym, dynamicznym SQL, ale jest kruchy i nieporęczny. Zamiast tego powinieneś zbudować zestaw wyników w komponencie warstwy środkowej lub użyć narzędzia do raportowania, które zbuduje wyniki w tabeli krzyżowej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jeszcze raz:procedura składowana a TV-UDF

  2. Logika warunkowa w skrypcie PostDeployment.sql przy użyciu SQLCMD

  3. Napraw komunikat 8116 „Data typu danych argumentu jest nieprawidłowa dla argumentu 1 funkcji podciągu” w SQL Server

  4. SQL- Policz wystąpienia określonego słowa we wszystkich procedurach składowanych

  5. Jeśli nie istnieje, nie działa w SQL CE