【问题标题】:How to join table by calculating one column value from other table如何通过计算另一表中的一列值来连接表
【发布时间】:2017-05-30 05:13:57
【问题描述】:

表 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中每个订单收到的金额?

【问题讨论】:

  • 在给定的交易日期,您的兑换表根本没有澳元条目

标签: sql database oracle sqlite jointable


【解决方案1】:

你需要以下几行的东西

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 子句。
  • 我认为这不再是答案,因为用户希望为除澳元值之外的所有内容计算货币。他在底部提出的建议可能会奏效。
【解决方案2】:

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

select t1.*,(t1.Value * t2.rate) "Result" from Transaction t1 join Exchange t2 on t1.Currency=t2.currency where t1.Currency='AUD';

【讨论】:

    【解决方案3】:

    如果我对问题的理解正确,您正在尝试使用汇率以澳元计算每个订单的价值,即如果价值以澳元为单位,请保持原样,否则乘以汇率以找到以澳元为单位的价值。

    为此,您需要左外连接,即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)
    

    【讨论】:

      【解决方案4】:

      我找到了解决办法--

      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'
      

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 1970-01-01
        • 2013-12-08
        • 2021-03-01
        • 2021-09-28
        • 1970-01-01
        • 2017-03-05
        • 2021-07-22
        • 1970-01-01
        相关资源
        最近更新 更多