powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом
4 сообщений из 4, страница 1 из 1
Помогите с запросом
    #37090306
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь день ломаю голову над, вроде бы, простой задачкой.
В таблице есть элементы: 1, 2, 3, 4... Обработка делает выборку элементов и печатает их по 4 штуки на лист. После печати пачка режется крест на крест и получившиеся стопки ставятся друг на друга. Как написать order by, чтобы в конечной стопке элементы располагались по порядку?

---------------------------------------------------------
IS NULL OR NOT IS NULL
...
Рейтинг: 0 / 0
Помогите с запросом
    #37091271
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BuryCommoner,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
with t(i) as 
  (values  1  union all select i+ 1  from t where i<NNN)
, l(n) as (select count( 1 ) from t)
select 
  t.i
, mod(t.i- 1 , l.n/ 4  + case mod(l.n,  4 ) when  0  then  0  else  1  end) list_no
from t, l
order by  2 ,  1 
NNN - кол-во записей.
Формулой в mod вычисляется номер листа для каждого id, по которому потом записи и сортируются.
На листе записи сортируются по id, в направлении увеличения которых и надо будет ставить стопки друг на друга.
...
Рейтинг: 0 / 0
Помогите с запросом
    #37092131
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, работает. Попадал на подобное решение, но оно показалось ошибочным из-за того, что при количестве элементов, не кратном четырем, на последних 2 листах они сбиваются в кучу. Тестил на 10 элементах и поэтому причину не выявил :) Придётся добивать пустыми до кратности.
...
Рейтинг: 0 / 0
Помогите с запросом
    #37092289
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь работает на любых количествах записей :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
with
	test(element) as (
		values  1 
		union all
		select element +  1 
		from test
		where element <  50 ) -- тестовые данные
	,src(element) as (select element from test where element <=  10 ) -- отбор элементов по условию
	,stat(cnt, cntmod4) as (select count(*), mod(count(*),  4 ) from src) -- количество строк
	,add(rn, element) as (
		values ( 0 , cast(null as int))
		union all
		select add.rn +  1 , cast(null as int)
		from add, stat
		where rn < case when stat.cntmod4 =  0  then  0  else ( 4  - stat.cntmod4) end) -- дополнение до кратности 4
	,algn(rn, element) as (
		select row_number() over(), element
		from (
			select element
			from src
			union all
			select element
			from add
			where rn >  0 
			order by element)) -- отбор, выравненный по 4 (сортировка элементов)
select algn.element
from algn, stat
order by mod(algn.rn -  1 , stat.cnt /  4  + case when stat.cntmod4 =  0  then  0  else  1  end), algn.rn

---------------------------------------------------------
IS NULL OR NOT IS NULL
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]