Database 计算字段的子查询为函数错误提供无效参数

Database 计算字段的子查询为函数错误提供无效参数,database,ms-access,Database,Ms Access,我有一个表,表中列出了商店和属性,这些属性以周为单位指示商店的年龄和商店的订单量。第二个表列出了基于年龄和数量的UPLH目标。我想返回第一个表中列出的商店及其相关的UPLH目标。以下各项工作正常: SELECT store, weeksOpen, totalItems, ( SELECT max(UPLH) FROM uplhGoals as b WHERE b.weeks <= a.weeksOpen AND 17000 between

我有一个表,表中列出了商店和属性,这些属性以周为单位指示商店的年龄和商店的订单量。第二个表列出了基于年龄和数量的UPLH目标。我想返回第一个表中列出的商店及其相关的UPLH目标。以下各项工作正常:

        SELECT store, weeksOpen, totalItems, 
    (
    SELECT max(UPLH)
    FROM uplhGoals as b
    WHERE b.weeks <= a.weeksOpen AND 17000 between b.vMIn and b.vmax
    ) as UPLHGoal
    FROM weekSpecificUPLH as

 a
编辑:

weekSpecificUPLH是一个查询,而不是一个表。如果我在Access中创建一个具有相同字段的新测试表,它就会工作。这将向我表明它与[totalItems]字段有关,该字段实际上是一个计算结果。因此,我用[a.IPO*a.OPW]替换该字段。同样的错误。好像它没有把它当作正确的数字类型

我试过:

SELECT store, weeksOpen, (opw * ipo) as totalItems, 
(
SELECT max(UPLH)
FROM uplhGoals as b
WHERE 17000 between b.vMIn and b.vmax AND b.weeks <= a.weeksOpen
) as UPLHGoal
FROM weekSpecificUPLH as
a
这很有效。但将“17000”替换为“totalitems”和相同的错误。我甚至尝试过使用valtotalItems,但都没有用。

试着将其转换为

b.vmin < a.totalItems AND b.vmax > a.totalItems
尽管您的数据库设计存在一些问题。 对于未来的方法,如果您展示您的数据库结构,这将非常有用

例如,您似乎没有WeeksSpecificCuplh表中的记录与UPLHGoals表中的记录相关,是吗

或者,更一般地说:除了在数据库模型外部的目标表中由数据本身描述的规则之外,这些表没有任何关联

因此,当你把它称为关联关系时,我想你会把自己和其他人弄糊涂,因为每个人都立即开始从关系模型的角度考虑经典关系。

试着把它变成关联关系

b.vmin < a.totalItems AND b.vmax > a.totalItems
尽管您的数据库设计存在一些问题。 对于未来的方法,如果您展示您的数据库结构,这将非常有用

例如,您似乎没有WeeksSpecificCuplh表中的记录与UPLHGoals表中的记录相关,是吗

或者,更一般地说:除了在数据库模型外部的目标表中由数据本身描述的规则之外,这些表没有任何关联


因此,当你称之为关联时,我认为你自己和其他人都陷入了困惑,因为每个人都立即开始从关系模型的角度考虑经典关系。

某种东西正在改变totalItems的价值类型。要解决这个问题,我:

已将weekSpecificUPLH查询结果复制到新表“tempUPLH” 使用该表代替从“uplhGoals”表中正确提取UPLHGoal的查询
totalItems的值类型正在发生变化。要解决这个问题,我:

已将weekSpecificUPLH查询结果复制到新表“tempUPLH” 使用该表代替从“uplhGoals”表中正确提取UPLHGoal的查询
错误消息是否表明哪个函数获得了无效参数?我看到的唯一函数是MAX,两个版本中的参数都相同。您能用示例数据创建SQLFIDLE来演示问题吗?@barmar it没有提供任何其他信息。除了使用字段而不是静态值之外,这两种方法都是相同的。我会这样做并发布链接。您使用的是MySQL还是MS Access?您有两个标记。错误消息是否显示哪个函数获取了无效参数?我看到的唯一函数是MAX,并且两个版本中的参数都相同。您可以使用示例数据创建SQLFIDLE来演示问题吗?@barmar it没有提供任何其他信息。除了使用字段而不是静态值之外,这两种方法都是相同的。我会这样做并发布链接。您使用的是MySQL还是MS Access?您有两个标签。您的正确,它们在DB术语中没有关联,抱歉误解。我试过那种方法,结果也犯了同样的错误。如果将a.totalItems替换为静态值,例如13200,它将返回与我的第一个示例类似的正确结果。但是您的初始代码也可以在SQLFIDLE中工作-尝试一下。这是合法的。PS虽然带有join的查询在语法上也是合法的,但在概念上是非常错误的:这些表之间没有任何连接,因为它们是不相关的。记住SQL是声明性的,因此引擎完全定义了如何解释您所声明的内容并将其转换为特定的操作-我会选择更直接的查询,并使用您最初完成的闭包,尽管无论如何-执行计划应该在Access中决定此解决方案,返回与原始错误相同的错误。看在上帝的份上,你为什么要用mysql标签愚弄我们-\你说得对,他们在DB方面没有关系,抱歉误解了。我试过那种方法,结果也犯了同样的错误。如果将a.totalItems替换为静态值,例如13200,它将返回与我的第一个示例类似的正确结果。但是您的初始代码也可以在SQLFIDLE中工作-尝试一下。这是合法的。PS虽然带有join的查询在语法上也是合法的,但在概念上是非常错误的:这些表之间没有任何连接,因为它们是不相关的。R
E记住SQL是声明性的,因此引擎完全定义了如何解释您所声明的内容并将其转化为特定的操作-我会选择更直接的查询,并采用您最初完成的闭包方式,尽管无论如何-执行计划应该在Access中决定此解决方案,返回与原始错误相同的错误。看在上帝的份上,你为什么要用mysql标签愚弄我们-\
b.vmin < a.totalItems AND b.vmax > a.totalItems