powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите, как вывести значения в одной выбранной валюте
3 сообщений из 3, страница 1 из 1
Подскажите, как вывести значения в одной выбранной валюте
    #40034608
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую форумчан!

А вот такой вопросик, есть таблица, предположим, товары и цены. Но значения цен могут быть занесены в разных валютах (RUB, USD).
Как получить все товары в одной валюте? Туда получается (RUB->USD), а назад нет (USD->RUB).

Пример:
Код: 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.
--цены
declare @Goods table(ID int, Price money, CurrencyAbbr varchar(3))
insert into @Goods(ID, Price, CurrencyAbbr)
select 1, 500, 'RUB' union all
select 2, 5.14, 'USD' union all
select 3, 400, 'RUB' union all
select 4, 820, 'RUB' union all
select 5, 7.7, 'USD'


--курсы
declare @CurrExchange table([CurrencyAbbr] varchar(3), [Converse] money)
insert into @CurrExchange(CurrencyAbbr, Converse)
select 'RUB', 78 union all
select 'USD', 1 
--select 'RUB', 1 union all  --<если ставлю кроссировку в обратном направлении
--select 'USD', 78 

SELECT pr.ID, pr.Price,
	pr.CurrencyAbbr, 
	pr.Price * 1 / e.Converse as PriceInOneCurrency
FROM @Goods pr
	inner join
	@CurrExchange as e ON pr.CurrencyAbbr = e.CurrencyAbbr



такой запрос, выдаётся верно, в частности здесь все цены переведены в USD:
Код: plaintext
1.
2.
3.
4.
5.
ID	Price	CurrencyAbbr	PriceInOneCurrency
1	500,00	RUB		6,4102
2	5,14	USD		5,14
3	400,00	RUB		5,1282
4	820,00	RUB		10,5128
5	7,70	USD		7,70

Если же поменять кроссировку и попытаться вывести всё в RUB, то здесь уже засада. По логике должно делиться, а не умножаться, и тут я не знаю как решить головоломку эту. Подскажите что делать.
т.е. если установлена кроссировка как выше, то годиться.

Как, добавить условие, что если стоит кроссировка
Код: sql
1.
2.
select 'RUB', 1 union all  --<если ставлю кроссировку в обратном направлении
select 'USD', 78 


то, результат должен быть:
Код: plaintext
1.
2.
3.
4.
5.
ID	Price	CurrencyAbbr	PriceInOneCurrency
1	500,00	RUB		500,00
2	5,14	USD		400,92
3	400,00	RUB		400,00
4	820,00	RUB		820,00
5	7,70	USD		600,60
...
Рейтинг: 0 / 0
Подскажите, как вывести значения в одной выбранной валюте
    #40034626
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600
Туда получается (RUB->USD), а назад нет (USD->RUB).

Нет, дык сделайте шобы було.
...
Рейтинг: 0 / 0
Подскажите, как вывести значения в одной выбранной валюте
    #40034704
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
declare @c varchar(3)='RUB'; -- Валюта отчётности
with
x(prod,val,curr) as (
  select b.prod,b.val,b.curr from (
    values
      (1,10.0,'USD'),
      (2,12.0,'RUB'),
      (3,6.0,'EUR')
    )as b(prod,val,curr)
  ),
y(curr,dest,fx) as (
  select b.curr,b.dest,b.fx from (
    values
      ('EUR','EUR',1.0),
      ('EUR','RUB',90.5),
      ('EUR','USD',1.22),
      ('RUB','EUR',1.0/90.5),
      ('RUB','RUB',1.0),
      ('RUB','USD',1.0/74),
      ('USD','EUR',1.0/1.22),
      ('USD','RUB',74.0),
      ('USD','USD',1.0)
  )as b(curr,dest,fx)
)
select x.prod,x.val,x.curr,y.fx,@c as dest,cast(x.val*y.fx as smallmoney)result from x
left join y on x.curr=y.curr and y.dest=@c

хотя по уму если - то как минимум курсы на каждый день идут
в более сложных случаях - ежесекундные курсы, или и того детальнее если высокоскоростная торговля,
и часто (одни и те-же) продукты приходят тоже в разные дни (по соответственно разным курсам и ценам).
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите, как вывести значения в одной выбранной валюте
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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