У меня есть запрос SQL Access, возвращающий результаты с Latitude & Долгота долготы (аналогично локатору магазина). Он отлично работает, пока я не попытаюсь включить предложение WHERE, ограничивающее результаты только результирующими в течение XXX миль (3 в моем случае).Предложение WHERE на вычисленном поле не работает
Следующий запрос отлично работает без пункта WHERE distCalc < 3
добавляется в:
PARAMETERS
[selNum] Long
, [selCBSA] Long
, [cosRadSelLAT] IEEEDouble
, [radSelLONG] IEEEDouble
, [sinRadSelLAT] IEEEDouble;
SELECT B.* FROM (
SELECT A.* FROM (
SELECT
CERT
, RSSDHCR
, NAMEFULL
, BRNUM
, NAMEBR
, ADDRESBR
, CITYBR
, STALPBR
, ZIPBR
, simsLAT
, simsLONG
, DEPDOM
, DEPSUMBR
, 3959 * ArcCOS(
cosRadSelLAT
* cosRadSimsLAT
* cos(radSimsLONG - radSelLONG)
+ sinRadSelLAT
* sinRadSimsLAT
) AS distCalc
FROM aBRc
WHERE CBSA = selCBSA
AND cosRadSimsLAT IS NOT NULL
AND UNINUMBR <> selNum
) AS A
ORDER BY distCalc
) AS B
WHERE B.distCalc < 3
ORDER BY B.DEPSUMBR DESC;
Когда я добавить пункт WHERE distCalc < 3
, я получаю страшный
Это выражение набран неверно, или это слишком сложный для оценки.
погрешность.
Учитывая, что значение создается в подзапросе А, я думал, что он будет доступен во внешнем B-запросе для сравнительных вычислений. Я мог бы пересчитать distCalc
в WHERE
, однако я стараюсь избегать этого, так как я использую настраиваемую функцию (ArcCOS
). Я уже делаю один удар по каждой строке, и есть значительные накладные расходы, связанные с дополнительными, если я могу избежать этого.
Попробуйте переместить предложение where where вправо после первой производной таблицы. Кроме того, ваш первый порядок заказа является избыточным. –
Что вы на самом деле пытаетесь сделать? – Bohemian
Предложение первого порядка - это удержание, когда я делал притяжение Top 20. Хотя на самом деле нет необходимости в этом вопросе, я не думаю, что это вызывает проблему. Перед написанием сообщения я попробовал предложение WHERE distCalc <3 в первом запросе и имел тот же результат.Я просто проверил его снова и удалил внешний запрос и имел ту же «слишком сложную» ошибку. Чтобы ответить на второй вопрос - я пытаюсь вытащить записи, которые находятся в пределах 3 миль (вычисленных в методе distCalc) переданных параметров. –