Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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' нужен результат:
у меня получилось: 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 результат не тот. который нужен:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 сен 16, 16:10 [19688206] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
а чего вторая буква латинского алфавите номер 3 ? Логику поясните плиз ? |
20 сен 16, 16:14 [19688232] Ответить | Цитировать Сообщить модератору |
doubleGroups
Guest |
минимальное значение id, которых есть совпадение по code+name |
||
20 сен 16, 16:21 [19688287] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
а как code+name даёт 1 для "A ABC 1 " ???? |
||||
20 сен 16, 16:22 [19688297] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Если нужны ответы, разумеется. |
||||
20 сен 16, 16:22 [19688298] Ответить | Цитировать Сообщить модератору |
doubleGroups
Guest |
Если добавить в таблицу @t
то у 14-ой записи будет отдельная группа groupId=7. так как нет совпадении по code+name |
|||||||||
20 сен 16, 16:25 [19688314] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
афигеть а почему тока вот ети две записи имеют одинаковый groupId?
|
|||||||||||||||||||||||||||||
20 сен 16, 16:27 [19688334] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Maxx, по его логике ADC=123... а 006 <> ADC |
20 сен 16, 16:29 [19688344] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
да я уже догодалси.. что алгоритм известен исключительно ТС и озвучивать его он не будет |
||
20 сен 16, 16:35 [19688385] Ответить | Цитировать Сообщить модератору |
doubleGroups
Guest |
Поступает информация о товаре по коду id (у разных id могут быть одинаковые коды товара,например code="A"), и его параметры name (их может быть несколько). И товары могут поступать с разными параметрами, нужно по коду товара и параметрам объединить в группу. |
20 сен 16, 16:54 [19688467] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
doubleGroups, да вам бы тех задания писать :)) SELECT *, DENSE_RANK() OVER (ORDER BY Code) as rnk FROM @tнаверное так :) |
20 сен 16, 16:56 [19688479] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
TaPaK, точнее если Id надо, то SELECT id,Code,Name, MIN(Id) OVER (PARTITION BY Code) FROM @t |
20 сен 16, 17:00 [19688508] Ответить | Цитировать Сообщить модератору |
doubleGroups
Guest |
не все так просто: 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' то результат должен быть:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 сен 16, 17:10 [19688572] Ответить | Цитировать Сообщить модератору |
кролик-зануда
Guest |
doubleGroups,
попробую протелепатировать. Похоже, что Вы решили, что записи у вас имеют какой-то порядок, и минимальный ID нужно выбирать в рамках группы с одинаковым кодом в пределах этого упорядоченного множества. только вот порядок в исходном наборе данных у Вас ничем не обеспечен |
|
20 сен 16, 17:36 [19688731] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |