Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка двух столбцов / 13 сообщений из 13, страница 1 из 1
28.08.2020, 09:22
    #39993252
Dimaprog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
Здравствуйте.
Есть таблица вида:
ID1 ID2
1 1
2 1
3 1
1 3
2 3
3 3
1 4
2 4
3 4

Надо сгруппировать так, чтобы в первом столбце остались лишь уникальные значения и во втором также уникальные.
Точнее, результат должен быть таковым:
ID1 ID2
1 1
2 3
3 4

Подскажите как это сделать, заранее спасибо
...
Рейтинг: 0 / 0
28.08.2020, 09:58
    #39993264
ASNexus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
Dimaprog,

Код: sql
1.
2.
3.
4.
5.
6.
7.
select id1, id2 from
   (select id1, row_number() over(order by id1) rn
      from (select distinct id1 from our_data_table)) d1
   full outer join
   (select id2, row_number() over(order by id2) rn
      from (select distinct id2 from our_data_table)) d2
   on d1.rn = d2.rn
...
Рейтинг: 0 / 0
28.08.2020, 10:19
    #39993278
Dimaprog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
ASNexus
Dimaprog,

Код: sql
1.
2.
3.
4.
5.
6.
7.
select id1, id2 from
   (select id1, row_number() over(order by id1) rn
      from (select distinct id1 from our_data_table)) d1
   full outer join
   (select id2, row_number() over(order by id2) rn
      from (select distinct id2 from our_data_table)) d2
   on d1.rn = d2.rn



Спасибо огромное за идею.
Пятница и голова уже не варит.
Ваш вариант практически рабочий, надо только один алиас дописать.
...
Рейтинг: 0 / 0
28.08.2020, 10:22
    #39993281
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
Dimaprog,

имхо, кроме как циклом, такое не получить ...
Код: 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.
declare @result table (ID1 int, ID2 int)

declare @t table (ID1 int, ID2 int)
insert into @t values
(1, 1),
(2, 1),
(3, 1),
(1, 3),
(2, 3),
(3, 3),
(1, 4),
(2, 4),
(3, 4)

-- select * from @t

while 1 = 1 
begin
	insert into @result(ID1, ID2)	
	select top 1
		ID1, min(ID2) 
	from @t t
	where not exists(select 1 from @result r where t.ID1=r.ID1 or t.ID2=r.ID2)
	group by ID1
	order by ID1;
	--
	if @@ROWCOUNT = 0 break;
end

select * from @result
...
Рейтинг: 0 / 0
28.08.2020, 10:25
    #39993286
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
Dimaprog
ASNexus
Dimaprog,

Код: sql
1.
2.
3.
4.
5.
6.
7.
select id1, id2 from
   (select id1, row_number() over(order by id1) rn
      from (select distinct id1 from our_data_table)) d1
   full outer join
   (select id2, row_number() over(order by id2) rn
      from (select distinct id2 from our_data_table)) d2
   on d1.rn = d2.rn




Спасибо огромное за идею.
Пятница и голова уже не варит.
Ваш вариант практически рабочий, надо только один алиас дописать.

он не рабочий, например на таких данных

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @result table (ID1 int, ID2 int)

declare @t table (ID1 int, ID2 int)
insert into @t values
(1, 1),
(2, 1),
(3, 1),
(1, 3),
(2, 5),
(3, 3),
(1, 4),
(2, 4),
(3, 4)

select id1, id2 from
   (select id1, row_number() over(order by id1) rn
      from (select distinct id1 from @t) t) d1
   full outer join
   (select id2, row_number() over(order by id2) rn
      from (select distinct id2 from @t) t) d2
   on d1.rn = d2.rn


id1id2112334NULL5
...
Рейтинг: 0 / 0
28.08.2020, 10:30
    #39993291
ASNexus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
court,

А чем он не рабочий?
Условие задачи "в первом столбце остались лишь уникальные значения и во втором также уникальные" выполнено. Про взаимосвязь значений в столбцах сказано не было.
...
Рейтинг: 0 / 0
28.08.2020, 10:33
    #39993293
Dimaprog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
А если в конце поставить проверку на нулл обеих полей?
...
Рейтинг: 0 / 0
28.08.2020, 10:33
    #39993294
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
ASNexus
court,

А чем он не рабочий?
Условие задачи "в первом столбце остались лишь уникальные значения и во втором также уникальные" выполнено. Про взаимосвязь значений в столбцах сказано не было.
дык, нет в исх.данных
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @t table (ID1 int, ID2 int)
insert into @t values
(1, 1),
(2, 1),
(3, 1),
(1, 3),
(2, 5),
(3, 3),
(1, 4),
(2, 4),
(3, 4)


записи с такими ID1 и ID2 ...

id1id2112334NULL5
...
Рейтинг: 0 / 0
28.08.2020, 10:41
    #39993303
ASNexus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
court,

Может быть я неправильно понял вопрос?
Я предположил, что независимо друг от друга нужно получить уникальные значения столбцов ID1 и ID2 без привязки одного к другому.

NULL в обоих полях мой запрос вернуть не может, но при разном количестве уникальных значений в столбах, тот в котором их меньше будет NULL'ами "дополняться".

Если это не абстрактная теоретическая задача, то, наверное, решение может быть другое, но тогда нужны уточняющие условия.
Добавлю, если значения все-таки связаны между собой, то в примере ТС недостаточно условий - как именно связаны, почему именно так:
ID1 ID2
1 1
2 3
3 4
а не, например:
ID1 ID2
1 1
2 4
3 3
Исходная сортировка сохраняется? Но явно это не указано.
...
Рейтинг: 0 / 0
28.08.2020, 10:45
    #39993306
Dimaprog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
Извиняюсь если не правильно объяснил задачу.
Столбцы конечно привязаны.
езультатом запроса должны быть целые записи, а не отдельные значения полей без привязки.
...
Рейтинг: 0 / 0
28.08.2020, 10:53
    #39993313
ASNexus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
Dimaprog,

Тогда еще утонение, если к исходным данным добавить еще одну запись 5, 4
Что должно добавиться к результату?
5, 4 (но уже есть запись 3, 4 - значение во втором столбце не будет уникальным) или 5, NULL ?
...
Рейтинг: 0 / 0
28.08.2020, 11:00
    #39993317
Dimaprog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
ASNexus
Dimaprog,

Тогда еще утонение, если к исходным данным добавить еще одну запись 5, 4
Что должно добавиться к результату?
5, 4 (но уже есть запись 3, 4 - значение во втором столбце не будет уникальным) или 5, NULL ?


Такая запись не должна попасть в результат запроса.
Если бы была запись 5, 5 то она бы попала в результат.
...
Рейтинг: 0 / 0
28.08.2020, 11:01
    #39993319
Dimaprog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка двух столбцов
court
Dimaprog,

имхо, кроме как циклом, такое не получить ...
Код: 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.
declare @result table (ID1 int, ID2 int)

declare @t table (ID1 int, ID2 int)
insert into @t values
(1, 1),
(2, 1),
(3, 1),
(1, 3),
(2, 3),
(3, 3),
(1, 4),
(2, 4),
(3, 4)

-- select * from @t

while 1 = 1 
begin
	insert into @result(ID1, ID2)	
	select top 1
		ID1, min(ID2) 
	from @t t
	where not exists(select 1 from @result r where t.ID1=r.ID1 or t.ID2=r.ID2)
	group by ID1
	order by ID1;
	--
	if @@ROWCOUNT = 0 break;
end

select * from @result



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


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