我有一个表格,其中包含商店和属性列表,用于指示商店的年龄和商店的订单量。第二个表列出了基于年龄和数量的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)无济于事。
答案 0 :(得分:0)
尝试将其变为
b.vmin < a.totalItems AND b.vmax > a.totalItems
虽然您的数据库设计存在问题。 对于未来的方法,如果您揭示数据库结构将非常有用。
例如,您似乎没有与UPLHGoals表中的记录相关的weekSpecificUPLH表中的记录,是吗?
或者,更一般:除了数据本身在目标表中描述的规则(这是&#34;外部&#34;到数据库模型)之外,这些表没有任何关联。
因此,当你称之为&#34;关联&#34;你得到了自己和他我猜想,其他人都会陷入混乱,因为每个人都会立即开始考虑关系模型中的经典关系。
答案 1 :(得分:0)
有些东西正在改变totalItems的值类型。要解决我: