powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на выборку
13 сообщений из 13, страница 1 из 1
Запрос на выборку
    #39630471
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста, есть запрос, который из таблицы вида:
p1,p2,p3,p4,p5,p6
p1,p2,p3,p4,p5,p6
p1,p2,p3,p4,p5,p6
выдает результат:
p1,p2,p3,p4,p5
p6
p1,p2,p3,p4,p5
p6
p1,p2,p3,p4,p5
p6
То есть последний столбец в строке переходит на новую строку. Но есть загвоздка:
"(values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t1(i)
cross join (values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t2(i)"Если например в таблице 1 000 000 записей, то если в value будет 10 нулей он выдаст где то 191 запись, если добавить нулей до 40 где то то выдаст 320 000 записей, если еще добавлять то он выдаст 1200 000 записей, то есть пойдет по второму кругу. Сам вопрос: как можно зациклить этот valuesб либо как то по другому сделать?



Запрос:

Код: sql
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
declare @t table (i int)
declare @p table (p1 char(2), p2 char(2), p3 char(2), p4 char(2), p5 char(2))

insert @t (i)
select
	row_number()over(order by (select 1)) - 1
from
	(values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t1(i)
	cross join (values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t2(i)

insert @p (p1, p2, p3, p4, p5)
values
	('A1', 'B1', 'C1', 'D1', 'E1'),
	('A2', 'B2', 'C2', 'D2', 'E2'),
	('A3', 'B3', 'C3', 'D3', 'E3')

;
with
t1 as
	(
	select
	p1, p2, p3, rn + i as n
	from
	(
	select
	p1, p2, p3, row_number()over(order by (select 1)) as rn
	from
	@p p
	)q
	inner join @t t on t.i = q.rn - 1
	),
t2 as
	(
	select
	p4 as p1, p5 as p2, null as p3, rn + i as n
	from
	(
	select
	p4, p5, row_number()over(order by (select 1)) as rn
	from
	@p p
	)q
	inner join @t t on t.i = q.rn
	)

select
	p1, p2, p3, n
from
	t1
union all
select
	p1, p2, p3, n
from
	t2
order by
	n
...
Рейтинг: 0 / 0
Запрос на выборку
    #39630482
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
 case when a.n = 1 then p.p1 else p.p4 end as p1,
 case when a.n = 1 then p.p2 else p.p5 end as p2,
 case when a.n = 1 then p.p3 end as p3,
 row_number() over (order by (select 1)) as n
from
 @p p cross apply
 (values (1), (2)) a(n);
...
Рейтинг: 0 / 0
Запрос на выборку
    #39630487
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, подскажите, мне нужно вставить это вместо двух строк, где у меня values((0), (0)....и т.д?
...
Рейтинг: 0 / 0
Запрос на выборку
    #39630490
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11(values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t1(i)
cross join (values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t2(i)это просто таблица с номерами от 0 до "сколько напишите", каждый cross join (с 10 нулями) это степень десятки 1- 10, 2 - 100, 3 - 1000 ...
если вам нужна такая таблица в базе не обязательно создавать её "онлайн" создайте её заранее.
впрочем, в данном случае она только для наглядности и не является обязательной см. 21341053
...
Рейтинг: 0 / 0
Запрос на выборку
    #39630497
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11invm, подскажите, мне нужно вставить это вместо двух строк, где у меня values((0), (0)....и т.д?Такое впечатление, что вы даже не пробовали выполнить предложенный мной запрос.
...
Рейтинг: 0 / 0
Запрос на выборку
    #39630502
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, будет возможность только завтра это сделать. Вы дали уже готовый запрос?
...
Рейтинг: 0 / 0
Запрос на выборку
    #39630503
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11Вы дали уже готовый запрос?Да.
...
Рейтинг: 0 / 0
Запрос на выборку
    #39630506
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, Спасибо
...
Рейтинг: 0 / 0
Запрос на выборку
    #39631104
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, запрос работает, но есть проблема. Последний столбец с номерами, он мне очень мешает. Если я создаю еще одну таблицу @v b и помещаю результат запроса в нее, а из нее уже выбираю без столбца номеров(или даже с ним), то номера строк идут очень странно. То есть 1.2.3.4 до 244, потом 277, 245,246 и т.д до 276, 278, 279 и опять пока такая же ерунда не случится, из за чего это может быть?
...
Рейтинг: 0 / 0
Запрос на выборку
    #39631126
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

Без предложения order by, порядок строк в результирующем наборе может быть любым.
...
Рейтинг: 0 / 0
Запрос на выборку
    #39631134
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, без over by здесь: row_number() over (order by (select 1)), т.е row_number() over (select 1)? не значит ли это что, скажем, вторая строка станет 10? ну, с over by был порядок 1,2,3,4,5,6 - где по сути 2,4,6 строки были продолжением строк 1,3,5. Без over by будет так: 3,4,1,2,5,6 или так: 1,5,2,6,4,3?
...
Рейтинг: 0 / 0
Запрос на выборку
    #39631197
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вам не нужно поле n то его вовсе необязательно выводить на экспорт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @p table (id int identity, p1 char(2), p2 char(2), p3 char(2), p4 char(2), p5 char(2))

insert @p (p1, p2, p3, p4, p5)
values
	('A1', 'B1', 'C1', 'D1', 'E1'),
	('A2', 'B2', 'C2', 'D2', 'E2'),
	('A3', 'B3', 'C3', 'D3', 'E3')

select
case when a.n = 1 then p.p1 else p.p4 end as p1,
case when a.n = 1 then p.p2 else p.p5 end as p2,
case when a.n = 1 then p.p3 end as p3
from
@p p
cross apply (values (1), (2)) a(n)
order by
row_number() over (order by p.id, a.n)
...
Рейтинг: 0 / 0
Запрос на выборку
    #39632027
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дедушка, именно то, что нужно, большое спасибо
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на выборку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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