我正在db2上使用SQL。
运输表:
+--------+------+
| Weight | Cost |
+--------+------+
| 2 | 5 |
| 5 | 10 |
| 10 | 15 |
| 30 | 45 |
| 50 | 80 |
+--------+------+
项目表:
+---------+--------+
| Item ID | Weight |
+---------+--------+
| 1 | 34 |
| 2 | 4 |
| 3 | 9 |
| 4 | 5 |
| 5 | 16 |
+---------+--------+
我想使用重量将适当的运输费用与物料相关联。因此,如果该商品的重量与等于或大于该重量的下一个重量相关联。
我希望我的结果表出现在INNER JOIN之后,一切都是:
+---------+-------------+-----------------+---------------+
| Item ID | Item Weight | Shipping Weight | Shipping Cost |
+---------+-------------+-----------------+---------------+
| 1 | 34 | 50 | 80 |
| 2 | 4 | 5 | 10 |
| 3 | 9 | 10 | 15 |
| 4 | 5 | 5 | 10 |
| 5 | 16 | 30 | 45 |
+---------+-------------+-----------------+---------------+
我无法弄清楚如何将运输重量与物品重量相关联。一旦这样做,我就可以承担运费。
我尝试过使用“ WHERE> =运输重量”,但这给了我所有的可能性,而我只想要最好的,等于或次于最大的。我不太善于解释这一点,但我希望您通过查看所需的结果表来理解我的意思。
谢谢!
答案 0 :(得分:2)
Well, you can use a correlated subquery to get the weight and then a join
to get the associated cost:
select i.*, s.*
from (select i.*,
(select min(s.weight)
from shipping s
where s.weight >= i.weight
) as shipping_weight
from items i
) i join
shipping s
on i.shipping_weight = s.weight;
Perhaps a funner method uses window functions:
select i.*, s.*
from items i join
(select s.*, lag(weight) over (order by weight) as prev_weight
from shipping s
) s
on i.weight <= s.weight and
(i.weight > prev_weight or prev_weight is null)