Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Накопленый итог по товару  [new]
AntonDemin
Member

Откуда:
Сообщений: 165
Доброго времени суток
есть следующий запрос
drop table #temp
select * 
into #temp
from
(
	select 1 as a, 100 as b
	union all
	select 1 as a, -20 as b
	union all
	select 1 as a, -10 as b
	union all
	select 2 as a, 300 as b
	union all
	select 2 as a, -30 as b
)s

как получить следующую таблицу?
Товар Приход/Уход Баланс
1 100 100
1 -20 80
1 -10 70
2 300 300
2 -20 270
11 июн 09, 13:14    [7289977]     Ответить | Цитировать Сообщить модератору
 Re: Накопленый итог по товару  [new]
Roamer
Member

Откуда: г.Краснодар
Сообщений: 38
Нарастающий итог
11 июн 09, 13:50    [7290230]     Ответить | Цитировать Сообщить модератору
 Re: Накопленый итог по товару  [new]
AntonDemin
Member

Откуда:
Сообщений: 165
Спасибо но так не получается, у меня же идет с разделением по товару, есть ли возможность реализовать задачу без курсора ?
11 июн 09, 14:17    [7290421]     Ответить | Цитировать Сообщить модератору
 Re: Накопленый итог по товару  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
При отсутствии поля, задающего порядок ваших операций, оно и курсором фигня получится.
11 июн 09, 14:24    [7290466]     Ответить | Цитировать Сообщить модератору
 Re: Накопленый итог по товару  [new]
AntonDemin
Member

Откуда:
Сообщений: 165
Гавриленко Сергей Алексеевич,
Например так
drop table #temp
select * 
into #temp
from
(
	select 1 as N,1 as a, 100 as b,0 as C
	union all
	select 2 as N,1 as a, -20 as b,0 as C
	union all
	select 3 as N,1 as a, -10 as b,0 as C
	union all
	select 4 as N,2 as a, 300 as b,0 as C
	union all
	select 5 as N,2 as a, -30 as b,0 as C
	union all
	select 5 as N,2 as a, -10 as b,0 as C
	union all
	select 6 as N,3 as a, 30 as b,0 as C
)s

в поле "C" должен быть баланс
11 июн 09, 14:27    [7290491]     Ответить | Цитировать Сообщить модератору
 Re: Накопленый итог по товару  [new]
_djХомяГ
Guest
AntonDemin

в поле "C" должен быть баланс

Сказали же
При отсутствии поля, задающего порядок ваших операций, оно и курсором фигня получится.


По какому принципу сортируются записи - номер партии, дата операции, стоимость
Допустим - если в структуру ввести доп поле batchId - номер партии. то
select itemid,qty,identity(int) as batchid
into #test 
from #temp


select t.itemid,t.batchid,sum(t1.qty)
from #test t join #test t1 on 
       t.itemid=t1.itemid
and    t.batchid>=t1.batchid
group by t.itemid,t.batchid
11 июн 09, 14:35    [7290554]     Ответить | Цитировать Сообщить модератору
 Re: Накопленый итог по товару  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
if object_id('tempdb..#temp') is not null
    drop table #temp
select * 
into #temp
from
(
	select 1 as N,1 as a, 100 as b,0 as C
	union all
	select 2 as N,1 as a, -20 as b,0 as C
	union all
	select 3 as N,1 as a, -10 as b,0 as C
	union all
	select 4 as N,2 as a, 300 as b,0 as C
	union all
	select 5 as N,2 as a, -30 as b,0 as C
	union all
	select 6 as N,2 as a, -10 as b,0 as C
	union all
	select 7 as N,3 as a, 30 as b,0 as C
)s


select 
    n
    , b
    , ( select sum(b) from #temp x where a.a = x.a and a.n >= x.n) as b
from #temp a
11 июн 09, 14:40    [7290579]     Ответить | Цитировать Сообщить модератору
 Re: Накопленый итог по товару  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
sql server то какой?

для спящего время бодрствования равносильно сну
11 июн 09, 14:53    [7290701]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить