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

Откуда:
Сообщений: 8
можно ли реализовать нарастающий итог, который при выходе в отрицательное значение со следующей строки начинался заново?
например:
s Итог
1 1
-3 -2
2 2
-1 1
21 окт 13, 10:49    [15006702]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
StarikNavy
Member

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

все можно. версию БД хоть озвучьте
21 окт 13, 10:56    [15006759]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Ryan30
Member

Откуда:
Сообщений: 8
версия MS 2012
21 окт 13, 11:08    [15006820]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
declare @t table (id int not null primary key,s int)
insert into @t values(1,1),(2,-3),(3,2),(4,-1) 

;with t0 (id,s,[итог]) as
(select id,s,s from @t where id=1
union all 
select t.id,t.s,case when t0.[итог]<0 then t.s else t0.[итог]+t.s end
from @t t
join t0 on t.id =t0.id+1
) select * from t0
  order by id
21 окт 13, 11:37    [15006988]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Ryan30
Member

Откуда:
Сообщений: 8
a можно решить без помощи временных таблиц, например с помощью оконных функций?
21 окт 13, 11:45    [15007014]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ryan30
a можно решить без помощи временных таблиц, например с помощью оконных функций?

Так и сделано же
21 окт 13, 11:54    [15007069]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Ryan30
Member

Откуда:
Сообщений: 8
предложенное решение сделано с помощью временной таблицы
21 окт 13, 12:05    [15007149]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ryan30
предложенное решение сделано с помощью временной таблицы

И что вам мешает подставить свою "секретную" таблицу в текст запроса ?
21 окт 13, 12:07    [15007156]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Ryan30
Member

Откуда:
Сообщений: 8
ничего не мешает, но очень интересна возможность реализации альтернативного решения
21 окт 13, 12:13    [15007190]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Glory
Ryan30
a можно решить без помощи временных таблиц, например с помощью оконных функций?

Так и сделано же

Всё же не совсем так — оконные функции не используются.
21 окт 13, 12:15    [15007202]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
qwerty112
Guest
Ryan30
ничего не мешает, но очень интересна возможность реализации альтернативного решения

а какие у тебя претензии к предложенному решению ?
21 окт 13, 12:17    [15007225]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Glory
Member

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

Так и сделано же

Всё же не совсем так — оконные функции не используются.

ТС вполне может вклыдывать в "оконные функции" другой смысл. Как и во фразу "без помощи временных таблиц"
21 окт 13, 12:18    [15007232]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Ryan30
Member

Откуда:
Сообщений: 8
qwerty112,
не редко на использование вр стоит ограничение, поэтому интересно можно ли обойтись в данном случае без них
21 окт 13, 12:28    [15007326]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
ТС, нет тут временных таблиц, за вас просто тестовый пример сделали
21 окт 13, 12:29    [15007344]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Ryan30
интересно можно ли обойтись в данном случае без них

Конечно, можно.

Вот это ваше
Ryan30
s Итог
1 1
-3 -2
2 2
-1 1
— это что? Таблица? Результат какого-то запроса?
21 окт 13, 12:30    [15007346]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ryan30
не редко на использование вр стоит ограничение, поэтому интересно можно ли обойтись в данном случае без них

В предложенном решении нет временных таблиц
Таблица @t эмулирует вашу таблицу
Для того, чтобы каждый мог выполнить предложенный скрипт
21 окт 13, 12:30    [15007347]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Ryan30
Member

Откуда:
Сообщений: 8
Гость333,
это пример,
есть один столбец (s), для него нужно сделать нарастающий итог с условием, если сумма при нарастании уходит в минус,
то со следующей начинать суммировать заново
21 окт 13, 12:40    [15007427]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Ryan30
Member

Откуда:
Сообщений: 8
Glory,
есть, t0 - временная таблица
21 окт 13, 12:43    [15007449]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ryan30
есть, t0 - временная таблица

Вы ответы читаете ? Или только пишите ?
И t0 - это не таблица

Сообщение было отредактировано: 21 окт 13, 12:45
21 окт 13, 12:45    [15007459]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
qwerty112
Guest
Ryan30
Glory,
есть, t0 - временная таблица

кАшмар !
21 окт 13, 12:46    [15007472]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Ryan30
есть один столбец (s)

Столбец где? В запросе? В какой-то таблице?
21 окт 13, 12:56    [15007564]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 349
Ryan30
предложенное решение сделано с помощью временной таблицы


Это табличная переменная, а не временная таблица.
21 окт 13, 14:55    [15008583]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 349
Ryan30
Гость333,
это пример,
есть один столбец (s), для него нужно сделать нарастающий итог с условием, если сумма при нарастании уходит в минус,
то со следующей начинать суммировать заново


Со следующей - значит сначала нужно определить, как задаётся порядок.

Что мешает оформить процедурой с временными таблицами, а в Вашем случае ещё и с курсором?

Конечно курсоры - это плохо, но мы же должны советовать то, что Вы сможете реализовать?
21 окт 13, 15:01    [15008639]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Александр Бердышев
Ryan30
предложенное решение сделано с помощью временной таблицы

Это табличная переменная, а не временная таблица.

Всё гораздо хуже, для ТСа временная таблица — это t0, т.е. общее табличное выражение.
21 окт 13, 15:02    [15008661]     Ответить | Цитировать Сообщить модератору
 Re: нарастающий итог с сбрасыванием  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 349
Гость333
Александр Бердышев
пропущено...

Это табличная переменная, а не временная таблица.

Всё гораздо хуже, для ТСа временная таблица — это t0, т.е. общее табличное выражение.


Да, поспешил с выводами, подумал что он пишет по поводу
конечно курсоры - это плохо, но мы же завязанны на уровень программиста
21 окт 13, 15:05    [15008685]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить