Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объединение дублей в группы  [new]
doubleGroups
Guest
Исходные данные
declare @t table (rowId int identity(1,1)
, id int
, code nvarchar(100)
, name nvarchar(100)
, groupId int)
insert into @t (id, code, name)
select 1, 'A', '123' union all
select 1, 'A', 'ADC' union all
select 1, 'A', '001' union all
select 2, 'A', '123' union all
select 2, 'A', 'ABC' union all
select 2, 'A', '002' union all
select 4, 'A', '123' union all
select 5, 'A', 'ABC' union all
select 5, 'A', '005' union all
select 6, 'A', '005' union all
select 3, 'B', '456' union all
select 3, 'B', 'DFG' union all
select 3, 'B', '003'


нужен результат:
rowIdidcodenamegroupId
11A1231
21AADC1
31A0011
42A1231
52AABC1
62A0021
74A1231
85AABC1
95A0051
106A0051
113B4563
123BDFG3
133B0033


у меня получилось:
update t set t.groupId=x.id from @t t inner join (
select code, name, min(id) id
from @t
group by code, name
) x on t.code=x.code and t.name=x.name

update t set t.groupId=x.groupId from @t t inner join (
select id, min(groupId) groupId
from @t
group by id
) x on t.id=x.id

update t1 set t1.groupId=t2.groupId
from @t t1 inner join @t t2 on t1.code=t2.code and t1.name=t2.name
where t1.groupId > t2.groupId

update t1 set t1.groupId=t2.groupId
from @t t1 inner join @t t2 on t1.code=t2.code and t1.name=t2.name
where t1.groupId > t2.groupId

select * from @t


результат не тот. который нужен:
rowIdidcodenamegroupId
11A1231
21AADC1
31A0011
42A1231
52AABC1
62A0021
74A1231
85AABC1
95A0052
106A0052
113B4563
123BDFG3
133B0033
20 сен 16, 16:10    [19688206]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а чего вторая буква латинского алфавите номер 3 ? Логику поясните плиз ?
20 сен 16, 16:14    [19688232]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
doubleGroups
Guest
Maxx
а чего вторая буква латинского алфавите номер 3 ? Логику поясните плиз ?

минимальное значение id, которых есть совпадение по code+name
20 сен 16, 16:21    [19688287]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
doubleGroups
Maxx
а чего вторая буква латинского алфавите номер 3 ? Логику поясните плиз ?

минимальное значение id, которых есть совпадение по code+name

а как code+name даёт 1 для "A ABC 1 " ????
20 сен 16, 16:22    [19688297]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
doubleGroups
Maxx
а чего вторая буква латинского алфавите номер 3 ? Логику поясните плиз ?

минимальное значение id, которых есть совпадение по code+name
Мне кажется, есть смысл перейти, наконец, на нормальный русский язык.
Если нужны ответы, разумеется.
20 сен 16, 16:22    [19688298]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
doubleGroups
Guest
Если добавить в таблицу @t
rowId id code name
14 7 A 006

то у 14-ой записи будет отдельная группа groupId=7. так как нет совпадении по code+name
20 сен 16, 16:25    [19688314]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
doubleGroups
Если добавить в таблицу @t
rowId id code name
14 7 A 006

то у 14-ой записи будет отдельная группа groupId=7. так как нет совпадении по code+name

афигеть а почему тока вот ети две записи имеют одинаковый groupId?
doubleGroups
rowIdidcodenamegroupId
11A1231
21AADC1
20 сен 16, 16:27    [19688334]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Maxx,
по его логике ADC=123... а 006 <> ADC
20 сен 16, 16:29    [19688344]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
TaPaK
по его логике ADC=123... а 006 <> ADC

да я уже догодалси.. что алгоритм известен исключительно ТС и озвучивать его он не будет
20 сен 16, 16:35    [19688385]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
doubleGroups
Guest
Поступает информация о товаре по коду id (у разных id могут быть одинаковые коды товара,например code="A"), и его параметры name (их может быть несколько). И товары могут поступать с разными параметрами, нужно по коду товара и параметрам объединить в группу.
20 сен 16, 16:54    [19688467]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
doubleGroups,

да вам бы тех задания писать :))

	SELECT 	*,	DENSE_RANK() OVER (ORDER BY Code) as rnk	FROM @t 
наверное так :)
20 сен 16, 16:56    [19688479]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
TaPaK,

точнее если Id надо, то

SELECT 
	id,Code,Name, MIN(Id) OVER (PARTITION BY Code)
FROM @t
20 сен 16, 17:00    [19688508]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
doubleGroups
Guest
TaPaK
TaPaK,

точнее если Id надо, то

SELECT 
	id,Code,Name, MIN(Id) OVER (PARTITION BY Code)
FROM @t


не все так просто:
insert into @t (id, code, name)
select 1, 'A', '123' union all
select 1, 'A', 'ADC' union all
select 1, 'A', '001' union all
select 2, 'A', '123' union all
select 2, 'A', 'ABC' union all
select 2, 'A', '002' union all
select 4, 'A', '123' union all
select 5, 'A', 'ABC' union all
select 5, 'A', '005' union all
select 6, 'A', '005' union all
select 3, 'B', '456' union all
select 3, 'B', 'DFG' union all
select 3, 'B', '003' union all
select 7, 'A', '006' union all
select 8, 'B', '007' 


то результат должен быть:
rowId id code name groupId
11A1231
21AADC1
31A0011
42A1231
52AABC1
62A0021
74A1231
85AABC1
95A0051
106A0051
113B4563
123BDFG3
133B0033
147A0067
158B0078
20 сен 16, 17:10    [19688572]     Ответить | Цитировать Сообщить модератору
 Re: Объединение дублей в группы  [new]
кролик-зануда
Guest
doubleGroups,
+
вы там у себя на этом как бы радио как бы совсем охренели?


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

только вот порядок в исходном наборе данных у Вас ничем не обеспечен
20 сен 16, 17:36    [19688731]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить