Объедините результаты 3 запросов sql для расчета запаса - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь рассчитать запас по продукту, который имел склад со временем. У меня есть информация о сегодняшнем складе, а также о количестве продуктов, проданных и приобретенных за день. Итак, расчет для вчерашних значений будет: Yesterday_stock = сток-yesterday_sold_quantity + yesterday_purchased_quantity. Моя проблема в том, что я должен где-то сохранить количество ежедневного запаса, чтобы рассчитать запас предыдущего дня. Я обнаружил, что для того, чтобы сделать это, я мог бы использовать более 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
    |---------------|-----------------------|--------|--------

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

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

1 Ответ

0 голосов
/ 03 июля 2018

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

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
...