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

时间:2017-02-06 23:04:24

标签: database ms-access

我有一个表格,其中包含商店和属性列表,用于指示商店的年龄和商店的订单量。第二个表列出了基于年龄和数量的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

但是这个查询,它将totalItems的硬编码值替换为第一个表中的字段,给出了“函数的无效参数”错误。

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

为什么这不起作用的任何想法?还有其他选择吗?我可以轻松地使用dmax()并循环遍历每个记录来创建一个新表,但这似乎是查询应该能够生成的东西。

SQLFiddle:http://sqlfiddle.com/#!9/e123a8/1 看起来SQLFiddle输出(下面)是我正在寻找的,即使Access给出了错误。

| store | weeksOpen | totalItems | UPLHGoal |
|-------|-----------|------------|----------|
|     1 |        15 |      13000 |       30 |
|     2 |        37 |       4000 |       20 |
|     3 |        60 |      10000 |       30 |

编辑:

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

哪个有效。但用“totalitems”和相同的错误替换'17000'。我甚至尝试使用val(totalItems)无济于事。

2 个答案:

答案 0 :(得分:0)

尝试将其变为

b.vmin < a.totalItems AND b.vmax > a.totalItems

虽然您的数据库设计存在问题。 对于未来的方法,如果您揭示数据库结构将非常有用。

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

或者,更一般:除了数据本身在目标表中描述的规则(这是&#34;外部&#34;到数据库模型)之外,这些表没有任何关联。

因此,当你称之为&#34;关联&#34;你得到了自己和他我猜想,其他人都会陷入混乱,因为每个人都会立即开始考虑关系模型中的经典关系。

答案 1 :(得分:0)

有些东西正在改变totalItems的值类型。要解决我:

  • 将weekSpecificUPLH查询结果复制到新表格&#39; tempUPLH&#39;
  • 使用该表代替查询,该查询正确地将UPLHGoal从&lt; uplhGoals&#39;表