2017-05-30 79 views
0

表1“交易”如何通过计算来自其他表中的一个列值加入表

Transaction Trans_Date Order_N0  Method  Currency Value 
---------------------------------------------------------------------- 
     1 1/7/2016 2858   Paypal   NZD  156.23 
     2 1/7/2016 2859   Credit-Card CAD  200.10 
     3 1/7/2016 2860   Credit-Card GBP  305.87 
     4 1/7/2016 2861   Credit-Card CAD  200.05 
     5 1/7/2016 2862   Paypal   NZD  539.35 
     6 1/7/2016 2863   Paypal   GBP  824.54 
     7 1/7/2016 2864   Credit-Card AUD  4828.75 
     8 1/7/2016 2865   Paypal   AUD  8480.25 

表2的Exchange'

date currency rate 
---------------------------- 
1/7/2016 CAD  0.9648 
1/7/2016 GBP  0.5617 
1/7/2016 NZD  1.0449 
2/7/2016 CAD  0.9673 
2/7/2016 GBP  0.5645 
2/7/2016 NZD  1.045 
3/7/2016 CAD  0.9683 

我可以只选择那些货币是“AUD”像

Select * 
From Transaction 
Where Currency = 'AUD'; 

但我怎样才能计算已收到的每一笔订单在AUD的金额?

+0

你的交换表不必须入境澳元在给定的交易日期 –

回答

2

你需要在以下

SELECT t.*, (t.Value * e.Rate) 'Amount' 
FROM Transaction t INNER JOIN Exchange e ON t.Trans_Date = e.date and t.Currency = e.currency 
WHERE t.Currency = 'AUD' 

线的东西只要记住作为表规模的增长,你将不得不尝试,并确保您使用的语句也适用对于速度而言,但这并不关心具有这种小数据的事情。

+0

加上where子句。 –

+0

我不认为这就是答案了,因为用户想要计算除澳元价值以外的所有货币。他在底部提出的建议可能会奏效。 –

0

需要加入两个表并在WHERE子句中给货币。 试试这个..

选择T1 *,(t1.Value * t2.rate) “结果” 从事务T1上t1.Currency = t2.currency其中t1.Currency = 'AUD' 加入交易所T2 。

0

如果我理解问题的正确性,您尝试使用汇率来查找AUD中的每个订单的价值,即如果价值在AUD中保持原样,否则与汇率相乘以找到AUD中的值。

为此,您需要左外连接即Transaction left outer join Exchange

全面查询如下,

SELECT x.order_no, x.VALUE * NVL (y.rate, 1) 
    FROM TRANSACTION x LEFT OUTER JOIN EXCHANGE y 
    ON (x.trans_date = y.DATE AND x.currency = y.currency) 
0

我找到了解决办法 -

SELECT x.*,(x.VALUE * y.rate) 'AUD Value' 
FROM TRANSACTION1 x LEFT OUTER JOIN EXCHANGE y 
ON (x.trans_date = y.DATE AND x.currency = y.currency) where x.Currency <>'AUD' 

union 

Select *,Value 
From Transaction1 
Where Currency = 'AUD' 
相关问题