Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Просьба помочь в пересчёте Min(цены) / 10 сообщений из 10, страница 1 из 1
15.04.2020, 20:46
    #39947753
palladin600
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь в пересчёте Min(цены)
Как можно было бы получить список номенклатуры у кого самый минимальный прайс с учётом ценовой конверсии?
В поле цена указано значение в валюте определённой страны. Соответственно, чисто голые значения нельзя сравнить.
Их надо сконвертировать. Значит, что есть:
Код: 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
15.04.2020, 21:01
    #39947760
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь в пересчёте Min(цены)
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
15.04.2020, 22:59
    #39947790
palladin600
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь в пересчёте Min(цены)
alexeyvg
Айайай, 13 лет опыта с сиквелом...

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

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


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