Как вычислить, используя в том же столбце - PullRequest
0 голосов
/ 25 февраля 2019

Таблица 1 содержит информацию об учетной записи, скажем,

AccountTable

+--------------+----------------+----------+----------+
| Account_Name | Account_Number | Currency |   Date   |
+--------------+----------------+----------+----------+
| Test 1       |           1234 | USD      | 20190228 |
| Test 2       |          5678  | JPY      | 20190228 |
| Test 3       |           9012 | AUS      | 20190228 |
| Test 4       |           3456 | MEX      | 20190228 |
+--------------+----------------+----------+----------+

, тогда таблица 2 содержит информацию о валюте

CurrencyTable

CurrencyName|CurrencyRate|Date
USD         |50.9999     |20190228
KRW         |1.52422     |20190228
JPY         |11.2232     |20190228
MEX         |6.2323      |20190228
AUS         |5.1111      |20190228

и т. Д.on ...

Мне нужен вывод наподобие

Account_Name|Account_Number|CurrencyName|USCurrency|Date
Test1       |1234          |US          |1.0000    |20190228
Test2       |5678          |JPY         |572.3820  |20190228
Test3       |9012          |AUS         |260.6655  |20190228
Test4       |3456          |MEX         |317.8466  |20190228

в столбце USCurrency Мне нужно умножить / вычислить курс другой валюты к доллару США.У меня нет проблем с присоединением к двум столам.То, что я не знаю, как рассчитать ставку в том же столбце.Спасибо !!

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Сначала сохраните американскую валюту в переменной и выполните запрос выбора:

SET @US_CURRENCY := (SELECT CurrencyRate FROM CurrencyTable WHERE CurrencyName = 'USD');

SELECT AccountTable.Account_Name, 
AccountTable.Account_Number, 
CurrencyTable.CurrencyName,
IF( CurrencyTable.CurrencyName = 'USD', CurrencyTable.CurrencyRate/@US_CURRENCY, CurrencyTable.CurrencyRate*@US_CURRENCY ) AS USCurrency, 
AccountTable.Date
FROM AccountTable
LEFT JOIN CurrencyTable
ON AccountTable.Currency = CurrencyTable.CurrencyName;
0 голосов
/ 26 февраля 2019

Вам нужен оператор CASE в вашем SQL для расчета американской валюты для валюты, не связанной с СШАвыберите Account_Name, Account_Number, CurrencyName, CASE, когда CurrencyName = 'JPY', THEN CurrencyTable.CurrencyRate * (выберите CurrencyRate из CurrencyTable, где CurrencyName = 'US') WHEN CurrencyName = 'MEX', THEN CurrencyTable.CurrencyRate * (Выберите CurrencyRate из CurrencyTable, где CurrencyName =US (США)C1.CurrencyName

0 голосов
/ 25 февраля 2019

За исключением того, что ваш вывод не имеет особого смысла для меня (подробнее об этом ниже), уловка заключается в том, чтобы использовать ваш CurrencyTable дважды.

SELECT Account_Name, Account_Number, A.Currency, C2.CurrencyRate * C1.CurrencyRate AS USCurrency, A.Date
FROM AccountTable A
JOIN CurrencyTable C1 ON A.Date = C1.Date AND A.Currency=C1.CurrencyName
JOIN (SELECT * FROM CurrencyTable WHERE CurrencyName='USD') C2 ON A.Date = C2.Date

Как вы заметите в результате, USCurrency для строки = USD не возвращает 1. Было бы необходимо разделить 2 ставки друг на друга, чтобы получить этот результат, но по какой-то причине вы запрашиваете продукт в желаемом выводе.

Я считаю, что вы хотите C2.CurrencyRate / C1.CurrencyRate AS USCurrency или C1.CurrencyRate / C2.CurrencyRate AS USCurrency, что, конечно, меняет все записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...