![Как создать SQL-запрос в Excel 2007 с динамическим диапазоном дат?](https://rvso.com/image/1317557/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%20%D0%B2%20Excel%202007%20%D1%81%20%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%BC%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%D0%BE%D0%BC%20%D0%B4%D0%B0%D1%82%3F.png)
Я пытаюсь создать отчетную таблицу, которая может печатать отчеты за заданный период времени. Запрос ниже работает, но когда я пытаюсь использовать параметр ?
вместо даты, я получаю ошибку после выбора ячейки, содержащей мою дату. Если я использую одинарные кавычки, ('?')
я получаю ошибку преобразования из строки в дату/время, если я этого не делаю, (?)
я получаю синтаксическую ошибку около @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'}))"