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

Откуда: там и тут
Сообщений: 949
Такой странный (для меня) вопрос.

Например, есть отсортированная таблица.
===
9
8
7
7
5

Как можно и можно ли селектить чтобы получить такой результат:
Х=Значение позиции в таблице + сумма предыдущих значений
===
Т.е.
9
8+9
7+8+9
7+7+8+9
5+7+7+8+9
----------
и.т.п. проблема в том что эти значения не уникальны, есть повторения (как 7) и отсортировать по условию sum(X)=sum(*) where Values > X не получается.
Если добавить >= то к первой 7-ке прибавится вторая, что не верно.

Любой другой ключ тоже не пойдет, поскольку они не последовательны.

Как например, в Excel можно по ячейкам просуммировать.
Что-то подобное можно в SQL Server сделать?

Думал взять аналог Oracle ROWID в SQL Server, но ведь ROWID не сортирован, чтобы применить условия '>'
21 авг 09, 15:08    [7567357]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Иными словами - накопительное суммирование. (так может понятнее)
21 авг 09, 15:09    [7567373]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
ищите в faq нарастающий итог
21 авг 09, 15:10    [7567381]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Зато есть ROW_NUMBER().
21 авг 09, 15:11    [7567388]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Ok, спасибо. Пошел в ФАК! )
21 авг 09, 15:12    [7567401]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Robb
where Values > X не получается.
where (   Values > X
       or Values = X and id1 > id2
       )
где id1 и id2 - это уникальные идентификаторы сравниваемых записей
21 авг 09, 15:12    [7567405]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
ROW_NUMBER() OVER (ORDER BY XXXX)

спасибо
21 авг 09, 15:17    [7567452]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
Robb
ROW_NUMBER() OVER (ORDER BY XXXX)

спасибо

А что вы поставите в вашем примере вместо XXXX ??
21 авг 09, 15:18    [7567455]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Паганель
Robb
where Values > X не получается.
where (   Values > X
       or Values = X and id1 > id2
       )
где id1 и id2 - это уникальные идентификаторы сравниваемых записей


это было бы просто но уникальные идентификаторы и надо создать.

ROW_NUMBER OVER - решение
21 авг 09, 15:18    [7567457]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Glory,

Щас сделаю примерчик и опубликую...
21 авг 09, 15:18    [7567461]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
Robb
Glory,

Щас сделаю примерчик и опубликую...

Т.е. в этом примере уже в таблице будет больше одного поля из оригинального примера ?
21 авг 09, 15:19    [7567473]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Glory
Т.е. в этом примере уже в таблице будет больше одного поля из оригинального примера ?
А зачем? И одного - вполне достаточно.
21 авг 09, 15:21    [7567487]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
Anddros
Glory
Т.е. в этом примере уже в таблице будет больше одного поля из оригинального примера ?
А зачем? И одного - вполне достаточно.

Т.е. по нему и будет ORDER BY ?
21 авг 09, 15:24    [7567520]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Glory
Anddros
Glory
Т.е. в этом примере уже в таблице будет больше одного поля из оригинального примера ?
А зачем? И одного - вполне достаточно.

Т.е. по нему и будет ORDER BY ?
Ага. У автора он и так есть:
Robb
Например, есть отсортированная таблица.
...
И именно по этому столбцу DESC сортировка и нужна.
21 авг 09, 15:35    [7567611]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Нечно такое:

create table digits (digit int)
insert into digits values (1),(3),(4),(4),(5),(6),(6),(6),(7)

select 
    y.num, y.digit,
    y.digit + 
       (select isnull(SUM(x.digit),0) sum from
                (select ROW_NUMBER() OVER (order by digit asc) num, * from digits) x where x.num<y.num )
from
 ( select ROW_NUMBER() OVER (order by digit asc) num, * from digits) y

На в ФАК еще не лез..
ща схожу посмотрю.
21 авг 09, 15:40    [7567671]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Круто! Силищщщщща!
21 авг 09, 15:41    [7567679]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Robb
Member

Откуда: там и тут
Сообщений: 949
Посмотрел в ФАК.. у меня нет возможности переменные среды из программы определять.

Если бы мог, и к тому же были пронумерованы строки, то я бы вопросов не задавал.

ROW_NUMBER - решение.
21 авг 09, 15:45    [7567712]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Robb
у меня нет возможности переменные среды из программы определять.
программа пусть дергает хранимку
а она ей пусть возвращает результат
внутри хранимки декларируете и используете необходимые переменные
всё
21 авг 09, 15:48    [7567745]     Ответить | Цитировать Сообщить модератору
 Re: Странный вопрос  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Robb
Нечно такое:
...

Вот так короче:
;with q(d,r)as(select *,row_number()over(order by digit)from digits)select q.d,sum(p.d)from q,q p where p.r>=q.r group by q.r,q.d
21 авг 09, 16:02    [7567851]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить