Как создать SQL-запрос в Excel 2007 с динамическим диапазоном дат?

Как создать SQL-запрос в Excel 2007 с динамическим диапазоном дат?

Я пытаюсь создать отчетную таблицу, которая может печатать отчеты за заданный период времени. Запрос ниже работает, но когда я пытаюсь использовать параметр ?вместо даты, я получаю ошибку после выбора ячейки, содержащей мою дату. Если я использую одинарные кавычки, ('?')я получаю ошибку преобразования из строки в дату/время, если я этого не делаю, (?)я получаю синтаксическую ошибку около @p1.

В конечном итоге мне понадобится либо начальная и конечная дата, либо формула, добавляющая месяц или сдвиг к начальной дате/времени, чтобы отфильтровать данные по важной информации. Запрос был построен в 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'} )) 

Любая помощь будет высоко оценена.

решение1

Вам нужно будет ввести запрос как формулу, а не как текст, и построить дату из выбранной ячейки, чтобы создать допустимый SQL-оператор.

Предположим, что в ячейке A1 есть дата, введите следующую формулу в ячейку 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'}))"

Обратите внимание, что подчеркивания в конце каждой строки указывают на продолжение. Вам нужно будет удалить их и возвраты каретки, чтобы формула заработала. Вся формула размещена в одной строке ниже. (Трудно читать на этом сайте, но Excel это нравится!)

="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'}))"

Связанный контент