Подзапрос в 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 
Другие вопросы по тегам