powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка двух столбцов
13 сообщений из 13, страница 1 из 1
Группировка двух столбцов
    #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
Группировка двух столбцов
    #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
Группировка двух столбцов
    #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
Группировка двух столбцов
    #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
Группировка двух столбцов
    #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
Группировка двух столбцов
    #39993291
ASNexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

А чем он не рабочий?
Условие задачи "в первом столбце остались лишь уникальные значения и во втором также уникальные" выполнено. Про взаимосвязь значений в столбцах сказано не было.
...
Рейтинг: 0 / 0
Группировка двух столбцов
    #39993293
Dimaprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если в конце поставить проверку на нулл обеих полей?
...
Рейтинг: 0 / 0
Группировка двух столбцов
    #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
Группировка двух столбцов
    #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
Группировка двух столбцов
    #39993306
Dimaprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь если не правильно объяснил задачу.
Столбцы конечно привязаны.
езультатом запроса должны быть целые записи, а не отдельные значения полей без привязки.
...
Рейтинг: 0 / 0
Группировка двух столбцов
    #39993313
ASNexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimaprog,

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

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


Такая запись не должна попасть в результат запроса.
Если бы была запись 5, 5 то она бы попала в результат.
...
Рейтинг: 0 / 0
Группировка двух столбцов
    #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
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка двух столбцов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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