Member 12741312 Ответов: 2

Sql server: справка по SQL-запросу


Моя таблица выглядит следующим образом

item | date       | q_in | q_out |
----------------------------------
 a   | 25-08-2016 |  100 |  50
 b   | 26-09-2016 |  100 |   0 
----- upto 
 b   | 10-09-2016 |    0 | 100


Мне нужен такой вывод :-

item | open_stock | inward | outward | balance|
-----|------------|--------|---------|--------|
 a   |    1500    |  10000 |  500    | 1100   |
 b   |     500    |   5000 | 1000    | 4500   | 


где

open_stock = баланс q_in - q_out до 31-08-2016
inward = total q_in с 01-09-2016 по 10-09-2016
outward = общий q_out с 01-09-2016 по 10-09-2016
баланс = open_stock + inward-outward

Что я уже пробовал:

мой вопрос заключается в следующем, который нуждается в вашей помощи

select 
    item,
    (select 
         (SUM(q_in) - SUM(q_out))
     from 
         sale_table
     where 
         date >= '2016-08-25' and date <= '2016-08-31') as open_stock,
    SUM(q_in) as inward,
    SUM(q_out) as outward ,
    (open_stock + inward - outward) as balance
from 
    sale_table
where 
    date >= '2016-09-01' and date <= '2016-09-10'
group by 
    item

мне нужны значения вместо open_stock, inward и outward

заранее спасибо......

2 Ответов

Рейтинг:
17

Wendelius

Возможно, что-то вроде

SELECT a.item,
       a.open_stock,
       a.inward,
       a.outward,
       a.open_stock + a.inward - a.outward
FROM (select 
            item,
            (select 
                 (SUM(q_in) - SUM(q_out))
             from 
                 sale_table s2
             where 
                     s2.date >= '2016-08-25' 
                 and s2.date <= '2016-08-31'
                 and s2.item = sale_table.item) as open_stock,
            SUM(q_in) as inward,
            SUM(q_out) as outward 
        from 
            sale_table
        where 
            date >= '2016-09-01' and date <= '2016-09-10'
        group by 
            item) AS a


Member 12741312

дорогой @Mike, спасибо за ваш ответ, но он возвращает open_stock одинаково для всех элементов ... какие-нибудь исправления ???

Wendelius

Похоже, что ваш первоначальный запрос не имел никакой корреляции с внешним элементом. Увидеть обновленное решение

Maciej Los

5ед!

Wendelius

Спасибо :)

Рейтинг:
10

Maciej Los

Похоже, вы забыли определить правильную связь между запросом и подзапросом:

SELECT a.item, a.open_stock, a.inward, a.outward, a.open_stock + a.inward - a.outward as balance
FROM (select item, 
            (
             select (SUM(q_in) - SUM(q_out))
             from sale_table
             where date >= '2016-08-25' and date <= '2016-08-31' and item = first.item
            ) as open_stock,
            SUM(q_in) as inward,
            SUM(q_out) as outward 
        from sale_table As first
        where date >= '2016-09-01' and date <= '2016-09-10'
        group by first.item) AS a