我在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 |
+---------+--------+我想联系适当的运输成本与项目使用重量。因此,如果项目的重量与运输重量相关联,则等于该重量或下一个重量大于运输重量表中的重量。
我希望我的结果表在is之后,一切都是:
+---------+-------------+-----------------+---------------+
| 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 >=船运权“,但这给了我所有的可能性,我只想要最好的,要么等于,要么下一个最大。我不擅长解释这一点,但我希望你能理解我的意思,看看我想要的结果表。
谢谢!
发布于 2018-11-16 21:39:09
那么,您可以使用关联子查询获取权重,然后使用join获取相关成本:
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;也许一个有趣的方法使用窗口函数:
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)https://stackoverflow.com/questions/53345750
复制相似问题