Подзапрос в WHERE/ объединение 3 таблиц, 2 для записей и одна для номера, не возвращает результата / не дает результатов - MSAccess
Мой запрос возвращает любые записи. В зависимости от того, как я это пишу, он не возвращает ни записей, ни всех записей, хотя у меня нет кода, который просто все возвращал.
Мне нужно получить данные из двух источников с фактическими записями и из третьей таблицы, которая содержит информацию по всему проекту, не относящуюся ни к каким записям. Мне нужно отфильтровать записи, которые больше, чем переменная Miles_Budgeted.
Это не возвращает никаких записей, хотя, если я заменю param.Miles_Budgeted на числовое значение, например, 1000, он фильтрует до нужных записей.
SELECT
a.sort_id,
a.l1l2,
a.rtot_pct_oftot_miles,
b.sumofeq,
b.c_per_mile,
b.sumofo_total,
a.cpminrmd,
a.RunTotMiles,
param.Miles_Budgeted
FROM
(SELECT (p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Miles_Budgeted FROM Tbl_Project_Parameters as p) AS param,
qry_par_l2_by_cpermi AS a
INNER JOIN
qry_l2 AS b
ON a.l1l2 = b.l1l2
WHERE
((a.RunTotMiles) <=
(Param.Miles_Budgeted
)
)
ORDER BY
a.sort_id;
Этот вариант запроса не выполняется (синтаксическая ошибка в предложении FROM)
SELECT
a.sort_id,
a.l1l2,
a.rtot_pct_oftot_miles,
b.sumofeq,
b.c_per_mile,
b.sumofo_total,
a.cpminrmd,
a.runtotmiles,
param.miles_budgeted
FROM (
(
SELECT (p.budget_cost_targ / p.project_cost_per_mi) AS miles_budgeted
FROM tbl_project_parameters AS p ) AS param
INNER JOIN qry_par_l2_by_cpermi AS a )
INNER JOIN qry_l2 AS b
ON a.l1l2 = b.l1l2
AND (
a.runtotmiles) <= ( param.miles_budgeted )
ORDER BY a.sort_id;
Это также не возвращает никаких записей:
SELECT
a.sort_id,
a.l1l2,
a.rtot_pct_oftot_miles,
b.sumofeq,
b.c_per_mile,
b.sumofo_total,
a.RunTotMiles,
a.cpminrmd
FROM
qry_par_l2_by_cmipermi AS a
INNER JOIN
qry_l2 AS b
ON a.l1l2 = b.l1l2
WHERE
(
((a.RunTotMiles) <=
(
SELECT
(p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Budgeted_Miles
FROM
Tbl_Project_Parameters AS p
)
)
)
ORDER BY
a.sort_id;
Опять же, если
SELECT
(p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Budgeted_Miles
FROM
Tbl_Project_Parameters AS p
is заменяется числовым значением, запрос возвращает правильные записи. Я попытался окружить subq или поле с помощью val() или Format(,"Standard"), но это не помогает решить проблему; отдельный запрос только с соответствующим кодом возвращает правильные значения Budgeted_Miles равными 1000, как и должно быть.
Любые мысли приветствуются.
1 ответ
Вы пытались ограничить этот подзапрос, чтобы вернуть только одну запись? Я знаю, что некоторые версии SQL не нравятся, когда вы пытаетесь сравнить результаты SELECT
на одно значение.
Я считаю, что синтаксис для MS Access будет использовать "TOP":
SELECT TOP 1
(p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Budgeted_Miles
FROM
Tbl_Project_Parameters AS p