0

У меня есть 2 стола stockin и остаточный инвентарь Я хочу рассчитать количество запасов на складе, суммируя запас в и запас из группы по магазинам и чем вычитать из stockin запасти из .. Мой запрос работает хорошо, но когда оно не найдено ни одной записи в запасе из таблицы это сделать некоторые необычные расчетSQL-подзапрос (промежуточное количество запасов в количестве, суммируемом по запасам и запасам группы по магазину и вычитанию из запаса, чтобы запасать)

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 

ответ

0

Этот

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

получает вас ITEM_ID от Items_Store. В случае, если это null (и я полагаю, что это никогда не бывает), вы заменяете его на 0. В случае, если запись не может быть найдена, вы получаете NULL.

Заменить это на

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

Но, как Гордон уже упоминалось, лучше упростить запрос.

EDIT: Кажется, вы не используете все критерии при соединении таблиц. См. Здесь:

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.

+0

, она по-прежнему дает отрицательное число .if не найдено, то просто верните сумму из таблицы инвентаризации. – Mike

+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; 

Возможно, это исправит вашу проблему.

+0

спасибо за ваш ответ, но проблема все еще существует, он делает запас в минус, если он не найден item_ID в таблице Items_Store. Мне нужно, если он не найден, тогда просто верните сумму из таблицы инвентаризации – Mike