Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сформировать запрос: over (partition) или курсор? / 4 сообщений из 4, страница 1 из 1
26.05.2021, 23:55
    #40073358
aford
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сформировать запрос: over (partition) или курсор?
Привет, помогите пожалуйста, хотя бы советом куда смотреть. Нужно выбрать все строки с наименьшей ценой, где уникальны наименование и импортер (выделил красным ID, которые нужно отобрать)

IDНаименованиеИмпортерЦенаРеквизитыАдрес1ЯблокиООО Яблоки100ИНН 11111 КПП 22222Москва2ЯблокиООО Яблоки200ИНН 11111 КПП 22223Спб3СливаООО Сливы100ИНН 11111 КПП 22224Новгород4СливаООО Сливы200ИНН 11111 КПП 22225Тула5АпельсинООО Апельсины100ИНН 11111 КПП 22226Москва6АпельсинООО Апельсины200ИНН 11111 КПП 22227Москва7АпельсинООО Тоже апельсины300ИНН 11111 КПП 22228Спб8ТыкваООО Тыквы300ИНН 11111 КПП 22229Новгород9БритваООО Бритвы600ИНН 11111 КПП 22230Тула

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table #tmp (ID int, [Наименование] varchar(20), [Импортер] varchar(20), 
	[Цена] int, [Реквизиты] varchar(200), [Адрес] varchar(200));
insert into #tmp (ID, [Наименование], [Импортер], [Цена], [Реквизиты], [Адрес]) 
values (1, 'Яблоки', 'ООО Яблоки', 100, 'ИНН 11111 КПП 22222', 'Москва')
	 , (2, 'Яблоки', 'ООО Яблоки', 200, 'ИНН 11111 КПП 22223', 'Спб')
	 , (3, 'Слива', 'ООО Сливы', 100, 'ИНН 11111 КПП 22224', 'Новгород')
	 , (4, 'Слива', 'ООО Сливы', 200, 'ИНН 11111 КПП 22225', 'Тула')
	 , (5, 'Апельсин', 'ООО Апельсины', 100, 'ИНН 11111 КПП 22226', 'Москва')
	 , (6, 'Апельсин', 'ООО Апельсины', 200, 'ИНН 11111 КПП 22227', 'Москва')
	 , (7, 'Апельсин', 'ООО Тоже апельсины', 300, 'ИНН 11111 КПП 22228', 'Спб')
	 , (8, 'Тыква', 'ООО Тыквы', 300, 'ИНН 11111 КПП 22229', 'Новгород')
	 , (9, 'Бритва', 'ООО Бритвы', 600, 'ИНН 11111 КПП 22230', 'Тула');
...
Рейтинг: 0 / 0
27.05.2021, 01:47
    #40073372
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сформировать запрос: over (partition) или курсор?
aford,

Код: sql
1.
2.
3.
4.
with x as (
    select row_number() over (partition by [Наименование], [Импортер] order by [Цена] asc) as rn, * from #tmp 
)
select * from x where [rn] = 1 order by [id]
...
Рейтинг: 0 / 0
27.05.2021, 03:35
    #40073373
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сформировать запрос: over (partition) или курсор?
aford,

до появления оконных функций писали так
Код: sql
1.
2.
 
where exists (select min(*) from #tmp where ... group by [Наименование], [Импортер])

. с оконными функциями стало проще. непонятно каким тут боком курсор?
...
Рейтинг: 0 / 0
27.05.2021, 04:18
    #40073376
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сформировать запрос: over (partition) или курсор?
aford
Привет, помогите пожалуйста, хотя бы советом куда смотреть.
Смотреть можно сюда . Там решений - на любой вкус и цвет. От "классики", до "новомодных".
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сформировать запрос: over (partition) или курсор? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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