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

Откуда:
Сообщений: 173
Добрый день!
Помогите с запросом.

Есть числа уникальные числа идущие по порядку: 1,2,3,...54 (кол-во плавающее)
Нужно запросом выбрать числа по следующей логике:

1) a1 = Минимальное число
2) a2 = a1 + 3
3) a3 = a2 + 5
4) a4 = a3 + 7
5) a5 = a4 + 9
6) a6 = a5 + 11
7) a7 = a6 + 13
8) a8 = a7 + 15
9) и.т.д

В случае с числами от 1 до 54 необходимо получить 1,4,9,16,25,36,49
Необходимо получить значение не используя переменные и циклы.

Надеюсь что понятно объяснил
9 авг 17, 17:55    [20711650]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
Это называется "нарастающий итог". Четное или нечетное число можно определить по остатку от деления на 2.

Сообщение было отредактировано: 9 авг 17, 17:57
9 авг 17, 17:57    [20711653]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
Rankatan
Member

Откуда:
Сообщений: 250
select (select SUM(N) from T where N<=TT.N) from T TT


Кстати месяц август. ВУЗы закрыты, не?
9 авг 17, 18:07    [20711671]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6035
Rankatan,

Сдача хвостов. В оракловой ветке такие же "задачи" повалили.
9 авг 17, 18:08    [20711675]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
assmsk
Member

Откуда:
Сообщений: 173
Так и не понял, как все это поможет мне в моей задаче)
10 авг 17, 09:31    [20712603]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
iii2
Member

Откуда:
Сообщений: 202
assmsk, а в какой версии сервера это решать?
10 авг 17, 09:38    [20712625]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
КусокАналитика
Guest
iii2
assmsk, а в какой версии сервера это решать?


ИМХО правильный вопрос на каком диалекте sql нужно решение:)
10 авг 17, 09:48    [20712664]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
assmsk
Member

Откуда:
Сообщений: 173
2000
10 авг 17, 11:30    [20712967]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
iii2
Member

Откуда:
Сообщений: 202
assmsk
Добрый день!
Помогите с запросом.

Есть числа уникальные числа идущие по порядку: 1,2,3,...54 (кол-во плавающее)
Нужно запросом выбрать числа по следующей логике:

1) a1 = Минимальное число
2) a2 = a1 + 3
3) a3 = a2 + 5
4) a4 = a3 + 7
5) a5 = a4 + 9
6) a6 = a5 + 11
7) a7 = a6 + 13
8) a8 = a7 + 15
9) и.т.д

В случае с числами от 1 до 54 необходимо получить 1,4,9,16,25,36,49
Необходимо получить значение не используя переменные и циклы.

Надеюсь что понятно объяснил

Числа, не последовательные натуральные, как я понял?
А временные таблицы использовать можно?
Потому как в 2000 ROW_NUMBER() еще не было, и единственным адекватным вариантом получить пронумерованную последовательность была вставка во временную таблицу с identity полем.
11 авг 17, 09:34    [20715465]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать значения в определенной последовательности  [new]
aleks222
Guest
assmsk
2000


declare @t table(n int primary key);

insert @t
  select 1 
  union all
  select 2
  union all
  select 3
  union all
  select 5
  union all
  select 12
;
declare @a table( i int identity primary key, n int );

insert @a
  select 3 
  union all
  select 3+5
  union all
  select 3+5+7
  union all
  select 3+5+7+9
  union all
  select 3+5+7+9+11
;
 
select x = n + isnull( ( select sum(n) from @t where n < t.n ), 0) + isnull( ( select n from @a where i = ( select count(*) from @t where n < t.n ) ), 0 )
  from @t as t;
11 авг 17, 10:01    [20715601]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить