SQL子查询(库存数量运行时通过总计库存和库存分组,然后从库存中减去库存)

时间:2015-05-13 13:22:54

标签: sql switch-statement subquery inner-join correlated-subquery

我有2个表库存和缺货我想计算库存数量运行时通过总结库存和库存分组,然后从库存减去库存。 我的查询运行良好,但是当它没有在库存表中找到任何记录时,它会进行一些不寻常的计算

Select 
CASE 
    WHEN 
    (select ISNULL(Items_store.Item_ID,0) from Items_Store where Items_Store.Store_ID = Inventory_Incoming.Store_ID)
    <> 0
    THEN   
    SUM(Quentity)- 
    (select SUM(Items_Out) from Items_Store where Items_Store.Store_ID = Inventory_Incoming.Store_ID)
    ELSE
    SUM(Quentity) 
END as Stock 
,Store_ID,Item_ID
from Inventory_Incoming 
where Item_ID =1

group by 
Store_ID,
Item_ID

2 个答案:

答案 0 :(得分:0)

只需执行以下操作即可大大简化查询:

Select (sum(Quentity) - 
        coalesce((select SUM(Items_Out)
                  from Items_Store s
                  where s.Store_ID = ii.Store_ID
                 ), 0)
        ) as Stock, Store_ID, Item_ID
from Inventory_Incoming ii
where ii.Item_ID = 1
group by ii.Store_ID, ii.Item_ID;

也许这会解决你的问题。

答案 1 :(得分:0)

(select ISNULL(Items_store.Item_ID,0) from Items_Store where ...)

从Items_Store获取Item_ID。如果它为null(并且我认为情况从未如此),则将其替换为0.如果找不到记录,则为NULL。

将其替换为

ISNULL((select Items_store.Item_ID from Items_Store where ...), 0)

但正如戈登已经提到的那样,更好地简化你的查询。

编辑:链接表时似乎没有使用所有条件。见这里:

select 
  sum(quentity) - 
  coalesce(
  (
    select sum(items_out) 
    from items_store is
    where is.store_id = ii.store_id and is.item_id = ii.item_id
  ), 0)
from inventory_incoming ii
where item_id =1
group by store_id, item_id;

items_store必须由store_id和item_id链接。