用于添加列值以与其他列进行比较的SQL查询

时间:2011-12-27 15:27:45

标签: sql join compare

我有两张桌子

table_inventory
    List item
    inventory_rack_key(primarykey)
    node_key
    rack_id
    inventory_item_key
    in_coming_qty,locked_qty
    quantity

table_item
    inventory_item_key(primary key)
    item_id,product_zone

此处提供了表格示例DB TABLES
我需要查询以找出那些(net_qty)的项目,即差异b / w总和in_coming_qty& quantity& locked_qty是否定的。由node_key,rack_id, item_id,net_qty安排
注意:每个不同的集合{node_key,rack_id, item_id,net_qty}在输出中只有1行。 对于ex :{node_key,rack_id, item_id} = {ABD101,RK-01,562879}在 table_inventory 中有4行 但是在输出net_qty = -78(单行)。

我所做的查询是给我结果但我们可以用其他方式吗?

SELECT l.node_key, 
       l.rack_id, 
       i.item_id, 
       ( SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty) ) AS net_qty 
FROM   table_inventory l, 
       table_item i 
WHERE  l.inventory_item_key = i.inventory_item_key 
GROUP  BY l.node_key, 
          l.rack_id, 
          i.item_id 
HAVING SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty) < 0 

1 个答案:

答案 0 :(得分:4)

不是真的。有一个小变种:

select v.* from (
SELECT l.node_key, 
       l.rack_id, 
       i.item_id, 
       SUM(l.quantity + l.in_coming_qty - l.locked_qty) AS net_qty 
FROM   table_inventory l, 
       table_item i 
WHERE  l.inventory_item_key = i.inventory_item_key 
GROUP  BY l.node_key, 
          l.rack_id, 
          i.item_id
) v
where net_qty < 0 

- 这意味着SUM计算只需要编码一次,但您仍然需要进行SUM。