Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

requête t-sql entre une table d'événements et une plage de dates

Ce que vous recherchez est communément appelé une requête analyse croisée. Si ce que vous demandez est de savoir comment créer une requête tableau croisé avec un statique liste de colonnes, vous pouvez faire quelque chose comme ceci :

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

De même, vous pouvez utiliser la fonctionnalité PIVOT comme suggéré par Broken Link. Cependant, la solution ci-dessus et la fonctionnalité PIVOT reposent sur statique déclarations de colonnes. Si ce que vous voulez est une liste dynamique de colonnes (c'est-à-dire un tableau croisé dynamique), alors vous êtes en dehors des limites de ce que T-SQL a été conçu à l'origine. C'est possible avec un peu de SQL dynamique, mais c'est fragile et encombrant. Au lieu de cela, vous devez créer l'ensemble de résultats dans un composant de niveau intermédiaire ou utiliser un outil de création de rapports qui générera des résultats de tableau croisé.