sql >> Base de Datos >  >> RDS >> Sqlserver

consulta t-sql entre una tabla de eventos y un rango de fechas

Lo que está buscando se denomina comúnmente una consulta de tabulación cruzada. Si lo que está preguntando es cómo crear una consulta de tabulación cruzada dada una estática lista de columnas, puede hacer algo así:

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 manera similar, puede usar la funcionalidad PIVOT como lo sugiere Broken Link. Sin embargo, tanto la solución anterior como la funcionalidad PIVOT se basan en static declaraciones de columna. Si lo que desea es una lista dinámica de columnas (también conocida como tabulación cruzada dinámica), entonces está fuera de los límites de lo que T-SQL fue diseñado principalmente para hacer. Es posible con algo de SQL fugly dinámico pero es frágil y engorroso. En su lugar, debe crear el conjunto de resultados en un componente de nivel medio o utilizar una herramienta de informes que generará resultados de tabulación cruzada.