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

Откуда:
Сообщений: 170
Добрый день!
Необходимо рачитать остаток: Balance = Stock - Consumption (Сток - Потребность)
Для каждой новой версии VersionTheWeek (еженедельно появляются обновленные данные) Потребности и стока.
Для каждой недели Kodeweek(реальное время) и для каждой компоненты (ComponentID)
Расчет для конкретной версии(VersionTheWeek) и компоненты (ComponentID) :
Balance1 = Stock - Consumption1 (kodeweek=12W30)
Balance2 = Balance1 - Consumption2 (kodeweek=12W31)
...
BalanceN = BalanceN - ConsumptionN-1 (kodeweek=12WN)


CREATE TABLE [dbo].[Сonsumption] (
  [ComponentID] int NOT NULL,
  [Consumption] decimal(18, 0) NOT NULL,
  [VersionTheWeek] varchar(5) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [Kodeweek] varchar(5) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [Balance] decimal(18, 0) NOT NULL
)
ON [PRIMARY]
GO


CREATE TABLE [dbo].[Stock] (
  [ComponentID] int NOT NULL,
  [StockNumber] money NULL,
  [VersionTheweek] varchar(5) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [id] int IDENTITY(1, 1) NOT NULL,
  CONSTRAINT [Stock_pk] PRIMARY KEY CLUSTERED ([id])
)
ON [PRIMARY]
GO
19 июл 12, 18:55    [12890155]     Ответить | Цитировать Сообщить модератору
 Re: Работа с циклом  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
https://www.sql.ru/faq/faq_topic.aspx?fid=125
19 июл 12, 19:08    [12890182]     Ответить | Цитировать Сообщить модератору
 Re: Работа с циклом  [new]
danton
Member

Откуда:
Сообщений: 170
invm
https://www.sql.ru/faq/faq_topic.aspx?fid=125


Отличная тема! Спасибо!
А если необходимо наращивать итог не по всей таблице а по отдельным группировкам из нее.
Как преобразовать второй вариант из статьи?
19 июл 12, 22:20    [12890556]     Ответить | Цитировать Сообщить модератору
 Re: Работа с циклом  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
danton,

Второй вариант лучше не использовать -- порядок, в котором происходит обновление строк неопределен.
20 июл 12, 01:23    [12890956]     Ответить | Цитировать Сообщить модератору
 Re: Работа с циклом  [new]
danton
Member

Откуда:
Сообщений: 170
invm
danton,

Второй вариант лучше не использовать -- порядок, в котором происходит обновление строк неопределен.


Именно об этом я и говорил.
Спасибо большое!
20 июл 12, 10:38    [12891915]     Ответить | Цитировать Сообщить модератору
 Re: Работа с циклом  [new]
danton
Member

Откуда:
Сообщений: 170
invm
danton,

Второй вариант лучше не использовать -- порядок, в котором происходит обновление строк неопределен.


Вспомнил по чему я зацепился за второй вариант.
Меня интересует Update поля где рассчитывается нарастающий итог.
Интересно как сделать его.
20 июл 12, 14:36    [12893538]     Ответить | Цитировать Сообщить модератору
 Re: Работа с циклом  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
declare @t table (id int, grp int, v int, RunningTotal int null);

insert into @t
 (id, grp, v)
values
 (1, 1, 1),
 (2, 1, 1),
 (3, 1, 1),
 (4, 2, 1),
 (5, 2, 1),
 (6, 2, 1);
 
update t
 set
  RunningTotal = (select sum(v) from @t where id <= t.id and grp = t.grp)
from
 @t t;
 
select
 *
from
 @t
order by
 id;
20 июл 12, 14:50    [12893622]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить