0

初めてのポスターはこちら。

私は2つのテーブルを持っています1)トランザクション(T1)2)為替レート(T2)。T1 は複数の通貨で毎日の取引を保持し、T2 はすべての通貨の毎日の為替レートを保持します。

まず、特定の期間 (2016 年 1 月 1 日から 2016 年 6 月 30 日までの米ドル) のすべての通貨の平均レートを計算したいと考えています。

次に、計算された平均レートでトランザクションと変換された通貨額を引き出して、USD トランザクションが計算された USD AV を使用するようにします。レートとGBPの平均額を提供し、EUROはEUROの平均を使用します。変換するレートなど、すべての単一行について。

平均レートを取得する SQL は次のとおりです。

select currency,avg(b.exch_rate) as avg_rate 
from uviexchrates b 
where  date_from >'2015-01-01'  and date_from < '2015-12-31' 
and b.rates_to='gbp' and b.client like 'gc' group by b.currency

上記は私に次のようなものを与えます;

currency    avg_rate
AUD         2.04
CAD         1.96
CHF         1.47
USD         1.41

Transaction テーブルに対する私のクエリは次のとおりです。

select currency,cur_amount from agltransact
where period between '201600' and '201606' 

私が求めている結果はのとおりです。

     cur_amount     currency    Av_rate  converted_amount 
        -357000.00      EUR         1.12    -318153.46 
         6.55           EUR         1.12    5.84 
         6.55           EUR         1.12    5.84 
        27.77           USD         1.41    19.68 
         7.86           AUD         2.04    3.86 
        27.09           USD         1.41    19.20 
        54.98           CAD         1.96    28.11 

右端の 2 つの列が計算されます。上記の最初のクエリからの Av_rate & convert_amount は、cur_amount * av_rate の結果です。

質問; 上記の結果が生成されるように、2 つのクエリを組み合わせるにはどうすればよいですか?

それが明らかであることを願っています。

どうもありがとう

4

2 に答える 2

0
SELECT  T1.cur_amount ,
        T1.currency ,
        T2.avg_rate ,
        T1.cur_amount * T2.avg_rate AS converted_amount
FROM    ( SELECT    currency ,
                    cur_amount
          FROM      agltransact
          WHERE     period BETWEEN '201600' AND '201606'
        ) T1
        LEFT OUTER JOIN ( SELECT    currency ,
                                    AVG(b.exch_rate) AS avg_rate
                          FROM      uviexchrates b
                          WHERE     date_from > '2015-01-01'
                                    AND date_from < '2015-12-31'
                                    AND b.rates_to = 'gbp'
                                    AND b.client LIKE 'gc'
                          GROUP BY  b.currency
                        ) T2 ON T1.currency = T2.currency
于 2016-07-14T10:32:27.687 に答える
0

left join2 番目のテーブルを最初のクエリに接続するために使用します。

select t.currency, t.cur_amount, e.avg_rate, t_cur_amount / e.avg_rate
from agltransact t left join
     (select e.currency, avg(b.exch_rate) as avg_rate 
      from uviexchrates e 
      where e.date_from >= '2016-01-01' and e.date_from <= '2016-06-30' and
            e.rates_to = 'gbp' and
            e.client like 'gc'
      group by e.currency
     ) e
     on t.currency = e.currency
where t.period between '201600' and '201606' ;

注: テキストの説明と一致するように、最初のクエリの日付を変更しました。

于 2016-07-14T10:53:32.253 に答える