powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Свернуть итог запроса до удобочитаемого вида
10 сообщений из 10, страница 1 из 1
Свернуть итог запроса до удобочитаемого вида
    #37855626
Super_DJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица вида:
Исходная таблица
Код: 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.
SELECT 'Z11' AS Num1, '10' AS N_1, '3,72' AS P_1, '1439.87' AS Num2, '10' AS N_2, '3,67' AS P_2, '0212-02-0209.87P' AS Num3, '10' AS N_3, '2,58' AS P_3 union all
select 'Z11', '10', '3,72', '1439.87', '10', '3,67', '1335.87', '10', '4,09' union all
select 'Z11', '10', '3,72', 'WA4255.87D', '4', '4,1', '0212-02-0209.87P', '10', '2,58' union all
select 'Z11', '10', '3,72', 'WA4255.87D', '4', '4,1', '1335.87', '10', '4,09' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'EYQ C 72 LJS', '10', '0,83' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'Z 56', '10', '1,01' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', '0 241 240 610', '1', '1,19' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'DNST20EPR-U', '10', '1,22' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'Z 26', '10', '1,24' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'Z 55', '10', '1,34' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'DNSD7', '10', '1,38' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'V-LINE NR7', '10', '1,54' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', '0 242 240 591', '10', '1,56' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'TR5-1 1', '10', '1,81' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', '0 242 225 571', '4', '1,84' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'TR5-1 2', '8', '1,88' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', '0 242 232 507', '10', '2,61' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'UXT 4', '10', '2,81' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', '0 242 235 908', '4', '5,54' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', '0 242 235 607', '10', '5,57' union all
select 'Z 18', '10', '1,04', 'Z 95', '10', '1,21', 'DNSIT20', '10', '7,55' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'EYQ C 72 LJS', '10', '0,83' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'Z 56', '10', '1,01' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', '0 241 240 610', '1', '1,19' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'DNST20EPR-U', '10', '1,22' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'Z 26', '10', '1,24' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'Z 55', '10', '1,34' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'DNSD7', '10', '1,38' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'V-LINE NR7', '10', '1,54' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', '0 242 240 591', '10', '1,56' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'TR5-1 1', '10', '1,81' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', '0 242 225 571', '4', '1,84' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'TR5-1 2', '8', '1,88' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', '0 242 232 507', '10', '2,61' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'UXT 4', '10', '2,81' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', '0 242 235 908', '4', '5,54' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', '0 242 235 607', '10', '5,57' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', 'DNSIT20', '10', '7,55'



Как привести её к виду:
Итог
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT 'Z11' AS Num1, '10' AS N_1, '3,72' AS P_1, '1439.87' AS Num2, '10' AS N_2, '3,67' AS P_2, '0212-02-0209.87P' AS Num3, '10' AS N_3, '2,58' AS P_3 union all
select '', '', '', 'WA4255.87D', '4', '4,1', '1335.87', '10', '4,09' union all
select '', '', '', '', '', '', '', '', '' union all
select 'Z 18', '10', '1,04', 'BPR6EFS', '10', '1,54', '0 241 240 610', '1', '1,19' union all
select '', '', '', 'Z 95', '10', '1,21', '0 242 225 571', '4', '1,84' union all
select '', '', '', '', '', '', '0 242 232 507', '10', '2,61' union all
select '', '', '', '', '', '', '0 242 235 607', '10', '5,57' union all
select '', '', '', '', '', '', '0 242 235 908', '4', '5,54' union all
select '', '', '', '', '', '', '0 242 240 591', '10', '1,56' union all
select '', '', '', '', '', '', 'DNSD7', '10', '1,38' union all
select '', '', '', '', '', '', 'DNSIT20', '10', '7,55' union all
select '', '', '', '', '', '', 'DNST20EPR-U', '10', '1,22' union all
select '', '', '', '', '', '', 'EYQ C 72 LJS', '10', '0,83' union all
select '', '', '', '', '', '', 'TR5-1 1', '10', '1,81' union all
select '', '', '', '', '', '', 'TR5-1 2', '8', '1,88' union all
select '', '', '', '', '', '', 'UXT 4', '10', '2,81' union all
select '', '', '', '', '', '', 'V-LINE NR7', '10', '1,54' union all
select '', '', '', '', '', '', 'Z 26', '10', '1,24' union all
select '', '', '', '', '', '', 'Z 55', '10', '1,34' union all
select '', '', '', '', '', '', 'Z 56', '10', '1,01'



Собственно логика в следующем: Нужно пройтись по блоку Num1, и заменить все повторы пустыми ячейками. Затем пройтись по блоку Num2, и заменить все повторы в рамках Блока Num1 на пустые ячейки с сортировкой внутри блока. Затем пройтись по блоку Num3, и заменить все повторы в рамках Блока Num1 на пустые ячейки с сортировкой внутри блока.
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37855691
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Super_DJ, вы не указали порядок сортировки для вашего "пройтись по блоку"
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37855749
Super_DJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,

Не совсем понял, но...
Сначала все строки сортируются по Num1, потом в рамках блока с одинаковым Num1 поочередно сортируются и чистятся блоки Num2 и Num3. блоки Num2 и Num3 в рамках блока Num1 не зависят друг от друга.
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37855766
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Super_DJ,

если есть две строки с одинаковым num1 и num2, какая из них будет считаться повтором, а какая "первой"?
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37855771
Super_DJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,

DISTINCT с сортировкой внутри каждого блока, наверное так понятнее будет.
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37855874
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 

case row_number() over(partition by num1 order by num1, num2, num3) when 1 then num1 end as num1,
case row_number() over(partition by num1 order by num1, num2, num3) when 1 then N_1 end as N_1,
case row_number() over(partition by num1 order by num1, num2, num3) when 1 then P_1 end as P_1,

case row_number() over(partition by num1, num2 order by num1, num2, num3) when 1 then num2 end as num2,
case row_number() over(partition by num1, num2 order by num1, num2, num3) when 1 then N_2 end as N_2,
case row_number() over(partition by num1, num2 order by num1, num2, num3) when 1 then P_2 end as P_2,

case row_number() over(partition by num1, num2, num3 order by num1, num2, num3) when 1 then num3 end as num3,
case row_number() over(partition by num1, num2, num3 order by num1, num2, num3) when 1 then N_3 end as N_3,
case row_number() over(partition by num1, num2, num3 order by num1, num2, num3) when 1 then P_3 end as P_3

from [есть таблица] t
order by t.num1, t.num2, t.num3
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37855886
Super_DJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Блок Num1 очистился от повторов
Блок Num2 очистился от повторов но остался не сортированным
Блок Num3 содержит повторы, с ним похоже вообще ничего не произошло
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37856477
sskk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бред какой-то.
блоки N2 И N3 не связаны между собой.
тем не менее находятся в одной таблице

Код: 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.
57.
58.
-- #t - Исходная таблица

declare @N1 table  (num1 varchar(50), N_1 varchar(50),P_1 varchar(50))
declare @N2 table  (num1 varchar(50), num2 varchar(50), N_2 varchar(50),P_2 varchar(50))
declare @N3 table  (num1 varchar(50), num3 varchar(50), N_3 varchar(50),P_3 varchar(50))
 
 
insert into @n1
select distinct num1 ,n_1,p_1 from #t


insert into @n2
select distinct num1, num2 ,n_2,p_2 from #t

insert into @n3
select distinct num1,num3 ,n_3,p_3 from #t
 
 ;with n3 as(
select num1 n1_fk,
case when r_n1=1 then num1 else '' end num1,
case when r_n3=1 then num3 else '' end num3,
case when r_n3=1 then n_3 else '' end n_3,
case when r_n3=1 then p_3 else '' end p_3,
row_number()over(partition by num1 order by (select 1))rrn1


from(
select *,
row_number()over(partition by num1 order by (select 1))r_n1,
row_number()over(partition by num1,num3 order by (select 1))r_n3
from @n3 n3
)Z )
,
n2 as(
select num1 n1_fk,
case when r_n1=1 then num1 else '' end num1,
case when r_n2=1 then num2 else '' end num2,
case when r_n2=1 then n_2 else '' end n_2,
case when r_n2=1 then p_2 else '' end p_2,
row_number()over(partition by num1 order by (select 1))rrn1

from(
select *,
row_number()over(partition by num1 order by (select 1))r_n1,
row_number()over(partition by num1,num2 order by (select 1))r_n2
from @n2 n2
)Z )


select
coalesce(n2.num1,'') num1,
coalesce(num2,'') num2,
coalesce(n_2,'') n_2,
coalesce(p_2,'')p_2,
coalesce(num3,'')num3,
coalesce(n_3,'')n_3,
coalesce(p_3,'')p_3
from n2 full join n3 on n2.n1_fk=n3.n1_fk and n2.rrn1=n3.rrn1
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37857202
Super_DJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sskk,

Это не бред. Тем не менее почти конфетка. Поля n_1 и p_1 потерялись, но думаю это проблемой не станет.

Премного благодарен за помощь.
...
Рейтинг: 0 / 0
Свернуть итог запроса до удобочитаемого вида
    #37858074
sskk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не бред. Тем не менее почти конфетка. Поля n_1 и p_1 потерялись

точно, забыл поля добавить, ну ничего, разберетесь, я думаю.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Свернуть итог запроса до удобочитаемого вида
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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