Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

consulta t-sql entre uma tabela de eventos e um intervalo de datas


O que você está procurando é comumente chamado de consulta de tabela cruzada. Se o que você está perguntando é como construir uma consulta de referência cruzada com um estático lista de colunas, você pode fazer algo assim:
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

Da mesma forma, você pode usar a funcionalidade PIVOT conforme sugerido pelo Broken Link. No entanto, tanto a solução acima quanto a funcionalidade PIVOT dependem de static declarações de coluna. Se o que você deseja é uma lista dinâmica de colunas (também conhecida como tabela cruzada dinâmica), você está fora dos limites do que o T-SQL foi projetado principalmente para fazer. É possível com algum SQL fugly dinâmico, mas é frágil e pesado. Em vez disso, você deve criar o conjunto de resultados em um componente de camada intermediária ou usar uma ferramenta de relatório que criará resultados de tabela cruzada.