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

Откуда:
Сообщений: 15
добрый день
есть таблица
id acc debit credit debbal credbal
1 100 20 0
2 100 30 0
3 100 0 40
4 101 10 0
5 100 50 0

какой update моно сделать , чтобы поля debbal и credbal стали суммами полей debit и credit соответственно
по пред. строкам c группировкой по полю acc
пример.
id = 1, acc = 100, debba l = 20, credbal = 0
id = 2, acc = 100, debba l = (20 + 30), credbal = (0 + 0)
id = 3, acc = 100, debba l = (20 + 30 + 0), credbal = (0 + 0 + 40)
id = 4, acc = 101, debba l = 10, credbal = 0
id = 5, acc = 100, debba l = (20 + 30 + 0 + 50), credbal = (0 + 0 + 40 + 0)

надеюсь, понятно объяснил?
сделать нужно без использования циклов
2 май 13, 01:20    [14253635]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Это называется "нарастающий итог" (running total). В зависимости от вашего
select @@version;
, решения без циклов может и не найтись.

В 2012 можно сделать штатными средствами, см. хелп по sum() over(...). В предыдущих посложнее будет.
2 май 13, 04:21    [14253760]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
aleks2
Guest
Ennor Tiegael
Это называется "нарастающий итог" (running total). В зависимости от вашего
select @@version;
, решения без циклов может и не найтись.

В 2012 можно сделать штатными средствами, см. хелп по sum() over(...). В предыдущих посложнее будет.


1. За МКАД-ом жизни нет?
2. JOIN и GROUP BY ишо в MS SQL 6.0 были.
3. А sum() over(...) придумали для инвалидов мозга.
2 май 13, 07:41    [14253806]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Victorbur
Member

Откуда:
Сообщений: 15
aleks2
Ennor Tiegael
Это называется "нарастающий итог" (running total). В зависимости от вашего
select @@version;
, решения без циклов может и не найтись.

В 2012 можно сделать штатными средствами, см. хелп по sum() over(...). В предыдущих посложнее будет.


1. За МКАД-ом жизни нет?
2. JOIN и GROUP BY ишо в MS SQL 6.0 были.
3. А sum() over(...) придумали для инвалидов мозга.


насколько я изучил предложение OVER(), там нет такого, чтобы был расчет нарастающим итогом для каждой строки. Может я и не прав. Пример скрипта на основе моей таблицы сделайте
2 май 13, 10:34    [14253900]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Victorbur
насколько я изучил предложение OVER(), там нет такого, чтобы был расчет нарастающим итогом для каждой строки. Может я и не прав. Пример скрипта на основе моей таблицы сделайте

Изучили для MSSQL 2012 ?
2 май 13, 10:48    [14253914]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Victorbur
Member

Откуда:
Сообщений: 15
Glory
Victorbur
насколько я изучил предложение OVER(), там нет такого, чтобы был расчет нарастающим итогом для каждой строки. Может я и не прав. Пример скрипта на основе моей таблицы сделайте

Изучили для MSSQL 2012 ?


у меня SQL 2005. Да и изучил возможно не до конца, т.к. методологию не пойму. поэтому результатом моего запроса прошу скрипт

предложение перейти на версию 2012 не подойдет )))
2 май 13, 10:55    [14253923]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Victorbur
Изучили для MSSQL 2012 ?


А написали "В 2012 можно сделать штатными средствами, см. хелп по sum() over(...). В предыдущих посложнее будет. "
2 май 13, 11:00    [14253933]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Victorbur
Member

Откуда:
Сообщений: 15
Glory
Victorbur
Изучили для MSSQL 2012 ?


А написали "В 2012 можно сделать штатными средствами, см. хелп по sum() over(...). В предыдущих посложнее будет. "


ну это не я написал ))
2 май 13, 11:15    [14253955]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Victorbur
Glory
пропущено...


А написали "В 2012 можно сделать штатными средствами, см. хелп по sum() over(...). В предыдущих посложнее будет. "


ну это не я написал ))

Это вам написали. Чтобы вы прочитали.
2 май 13, 11:16    [14253960]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Victorbur
Member

Откуда:
Сообщений: 15
Glory
Victorbur
пропущено...


ну это не я написал ))

Это вам написали. Чтобы вы прочитали.


т.е. простого решения для версии ниже 2012 нет, вы это хотите сказать?
2 май 13, 11:29    [14253983]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Victorbur
т.е. простого решения для версии ниже 2012 нет, вы это хотите сказать?

Огласите критерии "простоты" ?
Решение есть. Даже в FAQ вынесено.
2 май 13, 11:31    [14253984]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Victorbur
Member

Откуда:
Сообщений: 15
Glory
Victorbur
т.е. простого решения для версии ниже 2012 нет, вы это хотите сказать?

Огласите критерии "простоты" ?
Решение есть. Даже в FAQ вынесено.


без циклов, как можно быстрее.
2 май 13, 11:37    [14253994]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Victorbur
Member

Откуда:
Сообщений: 15
Glory
Victorbur
т.е. простого решения для версии ниже 2012 нет, вы это хотите сказать?

Огласите критерии "простоты" ?
Решение есть. Даже в FAQ вынесено.


черт меня побери, как все просто оказалось )))
спасибо большое
2 май 13, 11:45    [14254009]     Ответить | Цитировать Сообщить модератору
 Re: суммирование полей из предыдущих строк  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Victorbur
без циклов, как можно быстрее.

Один из редких случаев, когда с циклами быстрее.
Calculate a Running Total in SqlServer, test 3.
Быстрый и без циклов там есть test 4, но он недокументированный (= ненадёжный).
2 май 13, 12:50    [14254117]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить