Sql 是否在同一行中添加列字段值?
我在db2上使用SQL 装运表: 项目表: 我想使用重量将适当的运输成本与物品相关联。因此,如果项目的重量与装运重量相关联,则等于或大于装运重量表中的下一个重量 在内部联接之后,我希望生成的表是什么,所有内容都是:Sql 是否在同一行中添加列字段值?,sql,database,db2,Sql,Database,Db2,我在db2上使用SQL 装运表: 项目表: 我想使用重量将适当的运输成本与物品相关联。因此,如果项目的重量与装运重量相关联,则等于或大于装运重量表中的下一个重量 在内部联接之后,我希望生成的表是什么,所有内容都是: +---------+-------------+-----------------+---------------+ | Item ID | Item Weight | Shipping Weight | Shipping Cost | +---------+----------
+---------+-------------+-----------------+---------------+
| 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>=装运重量,但这给了我所有的可能性,我只想要最好的一个,或者等于或次之。我不擅长解释这一点,但我希望你理解我的意思,通过查看我想要的结果表
谢谢 您可以使用相关子查询来获取权重,然后使用联接来获取相关成本:
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;
可能funner方法使用窗口函数:
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)
谢谢。MINs.weight和其中s.weight>=i.weight部分是我所需要的。干杯旁注:对于正数,我通常的建议是包含下限,不包含上限,也就是说,也就是说,下限,无论存储边界的方向如何,为了便于使用,我建议创建一个视图,或者创建一个可能有助于提高速度的视图,尽管源表可能足够小,但这并不重要。
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)