我在 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 >= Shipping Weight”,但这给了我所有的可能性,我只想要最好的那个等于或次大的。我不擅长解释这个,但我希望你通过查看我想要的结果表来理解我的意思。
谢谢!
最佳答案
好吧,您可以使用相关子查询来获取权重,然后使用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)
关于sql - 在同一行中添加列字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53345750/