Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

t-sql-Abfrage zwischen einer Ereignistabelle und einem Datumsbereich

Was Sie suchen, wird allgemein als Kreuztabellenabfrage bezeichnet. Wenn Sie fragen, wie Sie eine Kreuztabellenabfrage mit einem statischen erstellen Liste von Spalten, können Sie so etwas tun:

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

Ebenso können Sie die PIVOT-Funktion verwenden, wie von Broken Link vorgeschlagen. Allerdings verlassen sich sowohl die obige Lösung als auch die PIVOT-Funktionalität auf statisch Spaltendeklarationen. Wenn Sie eine dynamische Liste von Spalten (auch bekannt als dynamische Kreuztabelle) wünschen, dann befinden Sie sich außerhalb der Grenzen dessen, wofür T-SQL hauptsächlich entwickelt wurde. Es ist möglich mit etwas flüchtigem dynamischem SQL, aber es ist spröde und umständlich. Stattdessen sollten Sie die Ergebnismenge in einer Komponente der mittleren Ebene erstellen oder ein Berichterstellungstool verwenden, das Kreuztabellenergebnisse erstellt.