Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

t-sql query tra una tabella di eventi e un intervallo di date

Quello che stai cercando è comunemente chiamato query a campi incrociati. Se quello che stai chiedendo è come creare una query a campi incrociati data una statica elenco di colonne, puoi fare qualcosa del genere:

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

Allo stesso modo, puoi utilizzare la funzionalità PIVOT come suggerito da Broken Link. Tuttavia, sia la soluzione di cui sopra che la funzionalità PIVOT si basano su statico dichiarazioni di colonna. Se quello che vuoi è un elenco dinamico di colonne (noto anche come campi incrociati dinamici), allora sei fuori dai limiti di ciò per cui T-SQL è stato progettato principalmente. È possibile con qualche SQL vagamente dinamico ma è fragile e ingombrante. Dovresti invece creare il set di risultati in un componente di livello intermedio o utilizzare uno strumento di reporting che creerà risultati a campi incrociati.