我收到一条错误消息,指出我的 Access 查询中的表达式太复杂
I am getting an error that the expression in my Access Query is too complex
SELECT dbo_job.job_date,
dbo_job.job,
dbo_job.suffix,
dbo_job.item,
qry_SumCost.SumMatlPlan,
qry_SumCost.SumMatlAct,
([qty_released]*[fixovhd_rate])/[pcs_per_lbr_hr] AS lbr_cost_plan,
qry_LaborHours.fixovhd_t_lbr,
[fixovhd_t_lbr]/[qty_complete] AS [FG Actual Price]
FROM qry_SumCost
INNER JOIN (dbo_job
INNER JOIN qry_LaborHours
ON (dbo_job.job = qry_LaborHours.job)
AND (dbo_job.suffix = qry_LaborHours.suffix))
ON (qry_SumCost.job_date = dbo_job.job_date)
AND (qry_SumCost.job = dbo_job.job)
AND (qry_SumCost.suffix = dbo_job.suffix)
GROUP BY dbo_job.job_date,
dbo_job.job,
dbo_job.suffix,
dbo_job.item,
qry_SumCost.SumMatlPlan,
qry_SumCost.SumMatlAct,
([qty_released]*[fixovhd_rate])/[pcs_per_lbr_hr],
qry_LaborHours.fixovhd_t_lbr,
[fixovhd_t_lbr]/[qty_complete]
HAVING (((dbo_job.job_date) Between [Forms]![MainForm]![Text2]
And [Forms]![MainForm]![Text6])
AND ((dbo_job.job) Like "BM0*"
Or (dbo_job.job) Like "WT0*"));
当我删除表达式 [fixovhd_t_lbr]/qty_complete] 时它工作正常,但是当我包含它时它给我错误 "This expression is typed incorrectly, or its is too complex to be evaluated. For example, a numeric expression may contain too many complicated elements. Try simplifying the expression by assigning parts of the expression to variables." 我不明白这是怎么回事可以被认为是复杂的。该表达式的两个元素都直接来自两个不同的表,并且本身不是表达式(如果有人想知道的话)。我很肯定这是由于这个原因,因为通过排除过程我偶然发现这是问题所在。
您的查询没有意义。您正在使用 group by
,但没有聚合函数。这意味着 having
子句中的条件可以移动到 where
子句中,您可以改用 select distinct
。
所以,也许这会解决您的问题:
SELECT DISTINCT dbo_job.job_date,
dbo_job.job,
dbo_job.suffix,
dbo_job.item,
qry_SumCost.SumMatlPlan,
qry_SumCost.SumMatlAct,
([qty_released]*[fixovhd_rate])/[pcs_per_lbr_hr] AS lbr_cost_plan,
qry_LaborHours.fixovhd_t_lbr,
[fixovhd_t_lbr]/[qty_complete] AS [FG Actual Price]
FROM qry_SumCost INNER JOIN
(dbo_job INNER JOIN
qry_LaborHours
ON (dbo_job.job = qry_LaborHours.job) AND
(dbo_job.suffix = qry_LaborHours.suffix)
)
ON (qry_SumCost.job_date = dbo_job.job_date) AND
(qry_SumCost.job = dbo_job.job) AND
(qry_SumCost.suffix = dbo_job.suffix)
WHERE (((dbo_job.job_date) Between [Forms]![MainForm]![Text2] And
[Forms]![MainForm]![Text6]) And
((dbo_job.job) Like "BM0*" Or (dbo_job.job) Like "WT0*"));
SELECT dbo_job.job_date,
dbo_job.job,
dbo_job.suffix,
dbo_job.item,
qry_SumCost.SumMatlPlan,
qry_SumCost.SumMatlAct,
([qty_released]*[fixovhd_rate])/[pcs_per_lbr_hr] AS lbr_cost_plan,
qry_LaborHours.fixovhd_t_lbr,
[fixovhd_t_lbr]/[qty_complete] AS [FG Actual Price]
FROM qry_SumCost
INNER JOIN (dbo_job
INNER JOIN qry_LaborHours
ON (dbo_job.job = qry_LaborHours.job)
AND (dbo_job.suffix = qry_LaborHours.suffix))
ON (qry_SumCost.job_date = dbo_job.job_date)
AND (qry_SumCost.job = dbo_job.job)
AND (qry_SumCost.suffix = dbo_job.suffix)
GROUP BY dbo_job.job_date,
dbo_job.job,
dbo_job.suffix,
dbo_job.item,
qry_SumCost.SumMatlPlan,
qry_SumCost.SumMatlAct,
([qty_released]*[fixovhd_rate])/[pcs_per_lbr_hr],
qry_LaborHours.fixovhd_t_lbr,
[fixovhd_t_lbr]/[qty_complete]
HAVING (((dbo_job.job_date) Between [Forms]![MainForm]![Text2]
And [Forms]![MainForm]![Text6])
AND ((dbo_job.job) Like "BM0*"
Or (dbo_job.job) Like "WT0*"));
当我删除表达式 [fixovhd_t_lbr]/qty_complete] 时它工作正常,但是当我包含它时它给我错误 "This expression is typed incorrectly, or its is too complex to be evaluated. For example, a numeric expression may contain too many complicated elements. Try simplifying the expression by assigning parts of the expression to variables." 我不明白这是怎么回事可以被认为是复杂的。该表达式的两个元素都直接来自两个不同的表,并且本身不是表达式(如果有人想知道的话)。我很肯定这是由于这个原因,因为通过排除过程我偶然发现这是问题所在。
您的查询没有意义。您正在使用 group by
,但没有聚合函数。这意味着 having
子句中的条件可以移动到 where
子句中,您可以改用 select distinct
。
所以,也许这会解决您的问题:
SELECT DISTINCT dbo_job.job_date,
dbo_job.job,
dbo_job.suffix,
dbo_job.item,
qry_SumCost.SumMatlPlan,
qry_SumCost.SumMatlAct,
([qty_released]*[fixovhd_rate])/[pcs_per_lbr_hr] AS lbr_cost_plan,
qry_LaborHours.fixovhd_t_lbr,
[fixovhd_t_lbr]/[qty_complete] AS [FG Actual Price]
FROM qry_SumCost INNER JOIN
(dbo_job INNER JOIN
qry_LaborHours
ON (dbo_job.job = qry_LaborHours.job) AND
(dbo_job.suffix = qry_LaborHours.suffix)
)
ON (qry_SumCost.job_date = dbo_job.job_date) AND
(qry_SumCost.job = dbo_job.job) AND
(qry_SumCost.suffix = dbo_job.suffix)
WHERE (((dbo_job.job_date) Between [Forms]![MainForm]![Text2] And
[Forms]![MainForm]![Text6]) And
((dbo_job.job) Like "BM0*" Or (dbo_job.job) Like "WT0*"));