sql - 在同一行中添加列字段值?

标签 sql database db2

我在 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/

相关文章:

sql - 合并条件不同的查询

mysql - 每个字段可以有多个值

mysql - innobackupex 将什么放入其标准输出中?

mysql - 更好的方式存储 friend 和检索特定用户的 friend

SQL where x 或 y 但不是两者

java - 如何使用 java 连接 DB2 数据库连接?

java - 如何在 java 字符串查询中为 DB2 列创建别名?

python - 了解 SQLAlchemy 中的中间 SQL 语句

java - 尝试插入 ID 并获取 "cannot accept a NULL value"

sql - 使用参数调用函数或 View