[英]How to join table by calculating one column value from other table
表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
我只能选择货币为“澳元”的货币
Select *
From Transaction
Where Currency = 'AUD';
但是,如何计算每笔定单在AUD
收到的金额?
您需要以下内容
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'
请记住,随着表大小的增加,您将不得不尝试确保所使用的语句也可以提高速度,但是对于数据量如此之少的内容而言,这并不是问题。
需要联接两个表并在WHERE子句中提供货币。 尝试这个..
从事务t1中选择t1。*,(t1.Value * t2.rate)“结果”,在t1.Currency = t2.currency上加入交易所t2,其中t1.Currency ='AUD';
如果我理解正确的问题,那么您正在尝试使用汇率查找以AUD为单位的每个订单的价值,即,如果以AUD为单位,则保持原样,否则将其乘以汇率以AUD为单位查找价值。
为此,您将需要左外部联接,即Transaction left outer join Exchange
联接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)
我找到了解决方案-
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.