Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ElVencedor Member Откуда: Сообщений: 5 |
Добрый день, подскажите пожалуйста как заполнить таблицу Есть таблица Pribor c 3 полями Номер изделия, Наименование и производитель, как выбрать приборы, например если у них одинаковый Number то выбрать TOP 1 (отсортированы при выборке по номеру, производителю и наименованию) и так для всех, чтобы получить выборку, где уникальные Number с параметрами Name и Proizvod из TOP 1 Number - Name - Proizvod 1050 - Фильтр грубой очистки - Simens 1050 - Фильтр грубой очистки - Bosh 1050 - Фильтр грубой очистки - Samsung 1120 - Кран запорный - BEKO 1120 - Кран запорный - AKAI 1235 - Смеситель - Samsung Number - Name - Proizvod 1050 - Фильтр грубой очистки - Bosh 1120 - Кран запорный - AKAI 1235 - Смеситель - Samsung |
29 мар 17, 14:31 [20346597] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
ElVencedor, как то такselect Number, Name, Proizvod, row_number() over(partition by Number order by Proizvod) as r from ( select Number, Name, Proizvod, row_number(partition by Number order by Proizvod) as r from Pribor ) t where r = 1 |
29 мар 17, 14:37 [20346656] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
ElVencedor, как то такselect Number, Name, Proizvod from ( select Number, Name, Proizvod, row_number(partition by Number order by Proizvod) as r from Pribor ) t where r = 1 |
29 мар 17, 14:37 [20346659] Ответить | Цитировать Сообщить модератору |
ElVencedor Member Откуда: Сообщений: 5 |
alexeyvg, Спасибо :) |
29 мар 17, 14:52 [20346794] Ответить | Цитировать Сообщить модератору |
CrazyDr1v3r
Guest |
А как же тривиальная группировка по Number? SELECT Number, MIN(Name), MIN(Proizvod) FROM Pribor GROUP BY Number |
31 мар 17, 13:48 [20354553] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
никогда так не делайте |
||
31 мар 17, 14:12 [20354675] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
CrazyDr1v3r, MIN(Name) и MIN(Proizvod) чаще всего относятся к разным строкам с одним и тем же Number. |
||||
31 мар 17, 14:18 [20354713] Ответить | Цитировать Сообщить модератору |
Massa52 Member Откуда: Сообщений: 382 |
А если такwith Pribor as ( select 1050 Number, N'Фильтр грубой очистки' Name, N'Simens' Proizvod union all select 1050, N'Фильтр грубой очистки', N'Bosh' union all select 1050, N'Фильтр грубой очистки', N'Samsung' union all select 1120, N'Кран запорный', N'BEKO' union all select 1120, N'Кран запорный', N'AKAI' union all select 1235, N'Смеситель', N'Samsung' ), c as (SELECT Number, Name, MIN(Proizvod) mProizvod FROM Pribor GROUP BY Number, Name ) SELECT Number, MIN(Name) mName, mProizvod FROM c GROUP BY Number, mProizvod ORDER BY Number, mProizvod, mName |
31 мар 17, 15:09 [20354945] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Massa52, а если тебя стукнуть? |
31 мар 17, 15:38 [20355066] Ответить | Цитировать Сообщить модератору |
CrazyDr1v3r
Guest |
И? В данном конкретном случае конкретный номер обозначает конкретную деталь. Какой смысл принадлежности названия детали к конкретной строке? Тем более, никакого пользовательского идентификатора строки нет. row_number(partition by Number order by Proizvod)) as rпо факту - так же бьет на группы по Number с нумерацией внутри групп |
||||
31 мар 17, 15:57 [20355166] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
CrazyDr1v3r, В теории тебе намекают, что твое решение - быдлокод. По факту - ты сопротивляешься применять правильное решение. |
31 мар 17, 16:32 [20355296] Ответить | Цитировать Сообщить модератору |
CrazyDr1v3r
Guest |
Руслан Дамирович, Ну примените ваше "правильное решение" на SQL Server 2000 ;) |
31 мар 17, 17:12 [20355448] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
CrazyDr1v3r, и в чём затруднение? пронумеровать строки? |
31 мар 17, 18:14 [20355700] Ответить | Цитировать Сообщить модератору |
Massa52 Member Откуда: Сообщений: 382 |
Злой стал абзы. Ругаешься много. Нехарошо это. |
||
1 апр 17, 01:43 [20356384] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
И в этом случае семантически правильнее написать: SELECT Number, Name, MIN(Proizvod) FROM Pribor GROUP BY Number, Name Если же это не так (например, Number - тип изделия, а Name - название папки в справочнике), то ваш код выдаст ошибку, получится, что для данного типа изделия и производителя покажутся папки справочника, в которых нету этих данных.
|
||||||||||||||||||||||||
1 апр 17, 12:39 [20356783] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |