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

Откуда:
Сообщений: 278
Всем привет.

Можно как то получить строки по 5 штук по циклу.

Ну есть записи по такому порядку ID - 1,2,5,6,7,8,9,10,15,16,18,19 .... То есть с нарастающим.

Надо выбрать так

1,2,5,6,7
8,9,10,15,16
18,19

Спасибо.
10 июн 14, 10:25    [16147002]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
_human
Member

Откуда:
Сообщений: 566
antihacker777,

Вы хотите из N записей получить N/5 записей ?
и в итоговой выборке сложить ID-ки через запятую ?
10 июн 14, 10:49    [16147180]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
_TempFox_
Member

Откуда: из норы
Сообщений: 33
select top 5 ... поможет?
10 июн 14, 11:23    [16147441]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4805
Пробейте цифры ROW_NUMBER() , затем сделайте UNPIVOT по ROW_NUMBER() % 5 -- 0,1,2,3,4,
10 июн 14, 11:49    [16147741]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4805
a_voronin
Пробейте цифры ROW_NUMBER() , затем сделайте UNPIVOT по ROW_NUMBER() % 5 -- 0,1,2,3,4,


Ошибся PIVOT
10 июн 14, 11:50    [16147748]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
случайно заглянул
Guest
declare @t table (id int)
insert @t values(1)
insert @t values(2)
insert @t values(5)
insert @t values(6)
insert @t values(7)
insert @t values(8)
insert @t values(9)
insert @t values(10)
insert @t values(15)
insert @t values(16)
insert @t values(18)
insert @t values(19)


;with c as
(
  select
    dense_rank() over (order by t2.r) as ra,
    t2.id   
  from
  (
    select
      (row_number() over (order by id) - 1) / 5 as r,
      id
    from @t 
  ) t2
)

select
  ra,
  s = replace((select cast(id as nvarchar(10)) as 'data()' from c where ra = c2.ra for xml path('')), ' ', ',')
from c c2
group by ra
10 июн 14, 12:05    [16147922]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
antihacker777
Member

Откуда:
Сообщений: 278
_human
Так и есть. Ну с резульатами можно что угодно творить )
10 июн 14, 12:06    [16147935]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
antihacker777
Member

Откуда:
Сообщений: 278
случайно заглянул ,

мдяя без Ваших коментарии трудно понять
10 июн 14, 12:29    [16148143]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
случайно заглянул
Guest
увлекся я что-то, dense_rank конечно лишний :)
случайно заглянул
declare @t table (id int)
insert @t values(1)
insert @t values(2)
insert @t values(5)
insert @t values(6)
insert @t values(7)
insert @t values(8)
insert @t values(9)
insert @t values(10)
insert @t values(15)
insert @t values(16)
insert @t values(18)
insert @t values(19)


;with c as
(
  select
    (row_number() over (order by id) - 1) / 5 as ra,
    id
  from @t 
)

select
  ra,
  s = replace((select cast(id as nvarchar(10)) as 'data()' from c where ra = c2.ra for xml path('')), ' ', ',')
from c c2
group by ra
10 июн 14, 12:32    [16148164]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
antihacker777
Member

Откуда:
Сообщений: 278
Счетчик цикла меняется так. 0,5,10,15,20 итд
А row_number() возвращает 1,23,4,5,6,7, итд

Можно так.

select row_number(), id from t where row_number()>n and row_number()<m

Где n и m присваивается два соседних шага от цикла. То есть если n=0 то m=5, если n=5 то m=10, если n=10 то m=15,


Спасибо !
10 июн 14, 12:39    [16148226]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
случайно заглянул
Guest
antihacker777
случайно заглянул ,

мдяя без Ваших коментарии трудно понять


а чо тут комментировать-то? делим на группы по пять строк, потом соединяем одинаковые группы в строки.
10 июн 14, 12:39    [16148229]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4805
случайно заглянул
увлекся я что-то, dense_rank конечно лишний :)
случайно заглянул
declare @t table (id int)
insert @t values(1)
insert @t values(2)
insert @t values(5)
insert @t values(6)
insert @t values(7)
insert @t values(8)
insert @t values(9)
insert @t values(10)
insert @t values(15)
insert @t values(16)
insert @t values(18)
insert @t values(19)


;with c as
(
  select
    (row_number() over (order by id) - 1) / 5 as ra,
    id
  from @t 
)

select
  ra,
  s = replace((select cast(id as nvarchar(10)) as 'data()' from c where ra = c2.ra for xml path('')), ' ', ',')
from c c2
group by ra


+1
10 июн 14, 12:39    [16148230]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
случайно заглянул
Guest
antihacker777
Счетчик цикла меняется так. 0,5,10,15,20 итд
А row_number() возвращает 1,23,4,5,6,7, итд

Можно так.

select row_number(), id from t where row_number()>n and row_number()<m

Где n и m присваивается два соседних шага от цикла. То есть если n=0 то m=5, если n=5 то m=10, если n=10 то m=15,


Спасибо !


Вы с кем сейчас разговаривали? Какой цикл? Какой счетчик? Какой шаг и где там что присваивать надо? O_o
Скопируйте себе код и используйте на здоровье :)
10 июн 14, 12:47    [16148300]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
antihacker777
Member

Откуда:
Сообщений: 278
Так тема запрос по циклу.
Я вот решение стараюсь переделать под свою задачу )
10 июн 14, 13:09    [16148454]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
случайно заглянул
Guest
antihacker777
Так тема запрос по циклу.
Я вот решение стараюсь переделать под свою задачу )


Жесть! O_o
Похоже я лоханулся и сделал кому-то курсовик
10 июн 14, 13:10    [16148463]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
antihacker777
Member

Откуда:
Сообщений: 278
Нет нет. Я уже слишком стар, что бы быть студентом :-)

Просто мне нужно при каждом шаге цикла вытаскивтаь по 5 строк. Как быть )
10 июн 14, 13:12    [16148474]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
_human
Member

Откуда:
Сообщений: 566
antihacker777
Просто мне нужно при каждом шаге цикла вытаскивтаь по 5 строк. Как быть )

ну тогда читайте о курсорах.
p.s лучше разберитесь в готовом решении.
10 июн 14, 13:17    [16148515]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
antihacker777
Member

Откуда:
Сообщений: 278
нет нет. запрос нужен в С# - е. А не в SQL Managment Studio.
10 июн 14, 13:26    [16148574]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
Glory
Member

Откуда:
Сообщений: 104751
antihacker777
запрос нужен в С# - е. А не в SQL Managment Studio.

А вопрос почему тогда не в форуме по С# а в форуме по SQL ?
10 июн 14, 13:28    [16148592]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
antihacker777
Member

Откуда:
Сообщений: 278
Ну подумал SQL запрос.
10 июн 14, 13:29    [16148600]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по циклу  [new]
Glory
Member

Откуда:
Сообщений: 104751
antihacker777
Ну подумал SQL запрос.

Ну так вам и дали SQL запрос. Он выполняется на SQL сервере независимо от того, что за клиентская программа используется - что созданная кем то Managment Studio, что созданная вами на С#
10 июн 14, 13:35    [16148638]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить