powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Просьба помочь в пересчёте Min(цены)
10 сообщений из 10, страница 1 из 1
Просьба помочь в пересчёте Min(цены)
    #39947753
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно было бы получить список номенклатуры у кого самый минимальный прайс с учётом ценовой конверсии?
В поле цена указано значение в валюте определённой страны. Соответственно, чисто голые значения нельзя сравнить.
Их надо сконвертировать. Значит, что есть:
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
--список точек с указанием страны
declare @Shopz table(id int, [Country] nvarchar(3), Discount as int, ExtraCharges as nvarchar(255))
insert into @Shopz(id, [Country], ExtraCharges, Discount)
select 1, 'RUB', 20, Null union all
select 2, 'RUB', Null, 20 union all
select 3, 'RUB', Null, Null union all
select 4, 'EUR', 15, 3 union all
select 5, 'RUB', 15, -10 union all
select 6, 'UAH', 10, -3 union all
select 7, 'EUR', Null, Null  

--таблица номенклатуры
--все цены в разных валютах
declare @GoodsList table(ShopID int, GoodsID int, [PriceInRealCurrency] money)
insert into @GoodsList(ShopID, GoodsID, [PriceInRealCurrency])
select 1, 1, 440 union all
select 2, 1, 500 union all
select 4, 1, 4 union all
select 7, 1, 5 union all
select 1, 1, 400 union all
select 6, 2, 55 union all
select 7, 2, 3

--курсы
declare @CurrExchange table([Country] nvarchar(3), [Converse] money)
insert into @CurrExchange(Country, Converse)
select 'RUB', 1 union all
select 'UAH', 2.75 union all
select 'EUR', 81.7

--фактически, я так думаю, [Price] надо привести к единому курсу (например, к RUB), и только потом сравнить и отобрать мин.цену.
--Вручную, это выглядит так:
ShopID,	GoodsID,	RealPriceInRUB
1		1	Значение(440) * Курс(1) - Discount(0) + Доп.сборы(20) = 460
2		1	Значение(500) * Курс(1) - Discount(-20%) + Доп.сборы(0) = 400
4		1	Значение(4) * Курс(81.7) - Discount(-3%) + Доп.сборы(15) = 331.996
7		1	Значение(5) * Курс(81.7) - Discount(0) + Доп.сборы(0) = 408.5
1		1	Значение(400) * Курс(1) - Discount(0) + Доп.сборы(20) = 420
6		2	Значение(55) * Курс(2.75) - Discount(+3%) + Доп.сборы(10) = 165.7875
7		2	Значение(3) * Курс(81.7) - Discount(0) + Доп.сборы(15)  = 260.1

получается, что
на Goods = 1 самая меньшая цена в 4-ом магазине
а, на Goods = 2 самая меньшая цена в 6-ом

подскажите, как это оформить в запросе?
нужно, чтобы получился результат:
Код: plaintext
1.
2.
GoodsID; ShopID; Min(RealProceInRUB);
1	4		331.996
2	6		165.7875
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947760
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600
подскажите, как это оформить в запросе?
нужно, чтобы получился результат:
Код: plaintext
1.
2.
GoodsID; ShopID; Min(RealProceInRUB);
1	4		331.996
2	6		165.7875
Что то такое, только нужно в формулу добавить дискаунты:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
from (
	select *, row_number() over(partition by GoodsID order by PriceInRUB) as rn
	from (
		select g.GoodsID, s.id as ShopID, (g.PriceInRealCurrency * e.Converse) as PriceInRUB
		from @Shopz as s
			join @GoodsList as g
				on g.ShopID = s.id
			join @CurrExchange as e
				on s.Country = e.Country
	) as t
) as t
where rn = 1



Айайай, 13 лет опыта с сиквелом...
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947790
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Айайай, 13 лет опыта с сиквелом...

Ах, если бы... ) Мечты.
Тут всё проще. Когда ведёшь своё ИП, то сам себе и водитель и бухгалтер и вебдизайнер. Это отнимает колоссально времени. Очень бы хотелось погрузиться в SQL, это один из моих любимых инструментов. Но нет.
Если бы не форум, давным-давно бы ноги протянул. А так ну хоть как-то можно бороться с сетевыми альянсами, изобретая собственные велосипеды.
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947792
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, а почему row_number(), а не rank()?
Независимо от связей, в рамках одного GoodsID можно получить более одного минимальный прайса.
Например для ShopID = 'TRO-LO-LO-LO-LO' RealPriceInRUB снижена, Discount ноль и в тоже время есть ShopID, где RealPriceInRUB полная, но есть Discount - акция так, что в итоге PriceInRUB одинаковые минимальные.
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947805
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nullin
alexeyvg, а почему row_number(), а не rank()?
Первое, что в голову пришло, даже лень думать про rank :-)

nullin
Независимо от связей, в рамках одного GoodsID можно получить более одного минимальный прайса.
А, я сразу не понял, если минимальные в нескольких магазинах, то нужно вывести их все?
Ну да, тогда надо rank(), не уловил сразу в постановке задачи.
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947810
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, в постановке задачи об этом ни слова - потому вопросительный знак.
Обратил на это внимание, когда взгляд за row_number() зацепился.
Как-то он больше встречается для операций отбора уников, а по контексту задания такого не мелькало.
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947819
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nullin,
OMG, зачем вы сказали... я уже пример от alexeyvg прикрутил.
А здесь, ведь, и вправду rank может быть. Можно и с рангом пример для коллекции?
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947825
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
palladin600, все тоже самое
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947921
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600
Можно и с рангом пример для коллекции?
Просто замените одну функцию на другую :-)
...
Рейтинг: 0 / 0
Просьба помочь в пересчёте Min(цены)
    #39947923
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
palladin600
Можно и с рангом пример для коллекции?
Просто замените одну функцию на другую :-)
Но это если такая интерпретация постановки задачи правильная, т.е. если в нескольких магазинах цена минимальна, то нужно показать их все.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Просьба помочь в пересчёте Min(цены)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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