连接属性在范围内匹配的表

时间:2018-06-26 00:09:50

标签: sql db2

您好,我有一个查询要为包含项目,成本和重量的数据库设置

说出具有各自权重的项目的表格,看起来像ItemWeight

NAME      Weight
--------  -------
item1     250
item2     1600
item3     2200

还有另一个表,显示重量范围内的商品成本,如下所示 CostPerWeight

Weight    Cost
--------  ------
2500      6.00
2000      5.75
1500      5.00
1000      3.00
500       2.00

因此,我希望能够拉出的结果表是一件带有物品,重量和成本的桌子。

到目前为止,我已经汇总:

SELECT I.NAME, I.weight, C.cost
FROM ItemWeight I 
JOIN CostPerWeight C ON I.Weight <= C.Weight

但是问题是说重量265的商品应为2.00,因为它少于500,但也小于1500(即商品为5.00),所以我只需要帮助找到一种方法来检查是否一个属性在另一个属性的范围内以获得我想要的结果。非常感谢您的任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

一种解决方案是聚合:

SELECT I.NAME, I.Weight, MIN(C.Cost) AS Cost
FROM ItemWeight I 
JOIN CostPerWeight C ON I.Weight <= C.Weight
GROUP BY I.NAME, I.Weight;

答案 1 :(得分:0)

您需要在cost表中找到正确的行:

select i.*, c.cost
  from ItemWeight i
  left join CostPerWeight c on c.weight =
    (select min(d.weight) from CostPerWeight d where d.weight >= i.weight)

此外,您没有定义重量大于2500的商品会发生什么。为清楚起见,在表CostPerWeight中将列weight重命名为up_to_weight。 / p>