Объедините результаты 3-х запросов sql для расчета бегущего запаса

Я пытаюсь рассчитать запас по продукту, который склад имел с течением времени. У меня есть информация о сегодняшнем запасе, а также о количестве проданной и купленной продукции по дням. Таким образом, расчет для вчерашних значений будет следующим: Yesterday_stock=Запас-вчера_проданное_количество+вчера_купленное_количество. Моя проблема в том, что я должен где-то сохранить количество повседневных запасов, чтобы рассчитать запас предыдущего дня. Я обнаружил, что для этого я могу использовать предложение over sql с порядком. Но к сожалению у меня sql server 2008 и это не вариант.

Таблицы: Prdamount, который содержит текущий запас для каждого продукта (StuPrdID) и если он заблокирован по какой-либо причине.

|-------------- |------------------|---------------
|      StuPrdID |    StuQAmount    |prdBlockingReason
|---------------|------------------|-------------
|          12345|         16       | 
|---------------|------------------|--------------
|          08889|         12       |   expired
|---------------|------------------|------------

Таблица Moves, которая содержит информацию о вставках и выводах продуктов. Если значение поля MoveCase равно 1, то это выходной ход, если 2, то это купленное количество. Перемещает фиктивные данные таблицы:

    |-------------- |--------------------- -|--------|-------
    |MoveItemCode   |    MoveDate           |MoveCase|MoveRealQty
    |---------------|---------------------- |--------|-------
    |     12345     |2018-06-24 00:00:00.000|  1     |14
    |---------------|-----------------------|--------|--------
    |     08889     |2018-06-24 00:00:00.000|  2     |578
    |---------------|-----------------------|--------|--------

и таблица Product с информацией, связанной с данными:

|-------------- |------------------|
|      PrdCode  |   PrdDespription |
|---------------|------------------|
|          12345|      Orange juice| 
|---------------|------------------|
|          08889|         Chocolate|   
|---------------|------------------|

Я хочу такой вывод:

  |------------|--------------------- -|--------|--------------|------------
  |Prdcode     | PrdDescription        |Stock   |Stock 18/07/03|Stock 18/7/02
  |------------|---------------------- |--------|--------------|------------
  |     12345  |Orange Juice           |  80    |50              34
  |----------- |-----------------------|--------|--------------|------------
  |     08889  |Chocolate              |  45    |82              17
  |------------|-----------------------|--------|--------------|-------------

этот запрос дает мне бегущий запас:

select 
product.PrdCode,
product.PrdDescr,
SUM(StuQAmount) as Stock
from prdamount
left join product on (product.PrdID=prdamount.StuPrdID)
where prdamount.prdBlockingReason=' '
group by product.PrdCode,product.PrdDescr
order by product.PrdCode asc

Этот запрос дает мне количество проданных продуктов в день:

select 
moves.MoveItemCode,
prd.PrdDescr,
moves.MoveDate,
SUM(MoveRealQty) as 'sold_quantity'
from moves
left join prd on (moves.MoveItemCode=product.PrdCode)
where (moves.MoveDate>'2018-06-01' and  and moves.MoveCase=1)
group by moves.MoveItemCode,product.PrdDescr,moves.MoveDate
order by moves.MoveItemCode asc,moves.MoveDate asc

И этот запрос дает мне количество покупок по продуктам в день:

select 
moves.MoveItemCode,
prd.PrdDescr,
moves.MoveDate,
SUM(MoveRealQty) as 'Purchased_Quantity'
from Moves
left join product on (moves.MoveItemCode=product.PrdCode)
where  (moves.MoveDate>'2018-06-01' and moves.MoveCase=2)
group by moves.MoveItemCode,product.PrdDescr,moves.MoveDate
order by moves.MoveItemCode asc,moves.MoveDate asc

Я попытался объединить эти 3 запроса в один с помощью подзапросов, но это не сработало. Итак, как я могу добиться желаемого результата? Извините, если вопрос глупый, я новичок в sql.


person user1437832    schedule 03.07.2018    source источник
comment
Не могли бы вы добавить свою структуру данных и некоторые фиктивные данные с желаемым результатом? Нам будет намного легче помочь   -  person iamdave    schedule 03.07.2018
comment
Хорошо, Дэйв, я думаю, что сейчас лучше   -  person user1437832    schedule 03.07.2018
comment
И каков ваш желаемый результат от этих данных?   -  person iamdave    schedule 03.07.2018
comment
Теперь все в порядке? я сделал правку   -  person user1437832    schedule 04.07.2018


Ответы (1)


попробуй это,

select 
product.PrdCode,
moves.MoveItemCode,
product.PrdDescr,
moves.MoveDate,
SUM( case when moves.MoveCase=1 then MoveRealQty else 0 end) as 'sold_quantity',
SUM( case when moves.MoveCase=2 then MoveRealQty else 0 end) as 'Purchased_Quantity',
(select SUM(StuQAmount) from prdamount where StuPrdID = product.PrdID and prdBlockingReason=' ')
from moves
left join product on (moves.MoveItemCode=product.PrdCode)
where (moves.MoveDate>'2018-06-01')
group by moves.MoveItemCode,product.PrdDescr,moves.MoveDate, product.PrdCode
order by moves.MoveItemCode asc,moves.MoveDate asc
person Satya Krishna    schedule 03.07.2018
comment
Большое спасибо за ответ, Сатья. Я не понимал, что я хочу делать. Ваш код в порядке, но я не могу рассчитать запасы на складе, например, до двух недель. Я сделал редактирование, чтобы помочь - person user1437832; 04.07.2018