Como você cria uma consulta SQL no Excel 2007 com um intervalo de datas dinâmico?

Como você cria uma consulta SQL no Excel 2007 com um intervalo de datas dinâmico?

Estou tentando criar uma planilha de relatórios que possa imprimir relatórios de um determinado período. A consulta abaixo funciona, mas quando tento usar um ?parâmetro no lugar da data, recebo um erro após selecionar uma célula que contém minha data. Se eu usar aspas simples, ('?')recebo uma conversão de string em falha de data/hora; caso contrário, (?)recebo um erro de sintaxe próximo a @p1.

Eventualmente, precisarei de uma data de início e de término ou de uma fórmula adicionando um mês ou mudança para a data/hora de início para filtrar os dados para obter informações importantes. A consulta foi criada no Microsoft Query.

SELECT FloatTable.DateAndTime,
       TagTable.TagName
FROM   master.dbo.FloatTable FloatTable,
       master.dbo.TagTable TagTable
WHERE  FloatTable.TagIndex = TagTable.TagIndex
       AND (( FloatTable.DateAndTime >= {ts '2012-06-01 00:00:00'} )) 

Qualquer ajuda seria muito apreciada.

Responder1

Você precisará inserir a consulta como uma fórmula em vez de texto e criar a data a partir da célula selecionada para que uma instrução SQL válida seja criada.

Supondo que você tenha uma data na célula A1, coloque a seguinte fórmula na célula B1:

="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable _ 
FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = _
TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" _
& MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"

Observe que os sublinhados no final de cada linha indicam continuação. Você precisará excluí-los e os retornos de carro para que a fórmula funcione. A fórmula inteira é configurada em uma única linha abaixo. (Difícil de ler neste site, mas o Excel gosta!)

="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" & MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"

informação relacionada