如何通过计算其他表中的一个列值来连接表

时间:2017-05-30 05:13:58

标签: sql database oracle sqlite jointable

表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'交换'

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中每张订单的收款金额?

4 个答案:

答案 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'

请记住,随着表格大小的增长,您将不得不尝试并确保您使用的语句也适用于速度,但这并不是对具有如此少数据的事情的关注。

答案 1 :(得分:0)

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

选择t1。*,(t1.Value * t2.rate)“结果”来自事务t1加入Exchange t2 on t1.Currency = t2.currency,其中t1.Currency ='AUD';

答案 2 :(得分: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)

答案 3 :(得分: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'