0

、、、のように、同じ構造 を持つ 2 つのテーブルAとがあるとします。BCurrencySpotExposureFixing

これら 2 つのテーブルを結合して、たとえば、Fixing = '2013-01-03'通貨の主要なリストを取得するためにクエリを実行します ( の通貨Aと の通貨の間に常に対応があるとは限りませんB)。

  • 1 条件:A.Fixing = B.Fixing
  • 2 条件: A.Currency = B.Currency(一致しない通貨の値も返す)

これは例です:A要求されたその日のテーブルに USD 通貨がありますが、テーブル B にはありませんA。ゼロが続きます (ARS はテーブル B に含まれていなかったため、USD のエクスポージャーはありません)

どうすればクエリを書けるでしょうか?

以下の表と結果:

A:

Currency  Spot     Exposure      Fixing
--------  -------  ------------  ----------
AUD       1.3023   -504,561.00   30/01/2013
CHF       1.2378   268,243.00    30/01/2013
GBP       0.8597   2,204.00      30/01/2013
JPY       123.635  -552.00       30/01/2013
USD       1.3572   5,242.00      30/01/2013
AUD       1.300    -574,561.00   29/01/2013
CHF       1.235    545,152.00    29/01/2013
GBP       0.858    1,155,212.00  29/01/2013
JPY       123.388  -45,115.00    29/01/2013
USD       1.354    22,468.00     29/01/2013

B:

Currency  Spot     Exposure       Fixing
--------  -------  -------------  ----------
AUD       1.3023   256,442.00     30/01/2013
CHF       1.2378   -4,456,421.00  30/01/2013
GBP       0.8597   15,246.00      30/01/2013
JPY       123.635  1,243,146.00   30/01/2013
AUD       1.300    41,246.00      29/01/2013
CHF       1.235    243.00         29/01/2013
GBP       0.858    54,564.00      29/01/2013
JPY       123.388  140.00         29/01/2013

結果:

Currency  A.Exposure   B.Exposure     Fixing
--------  -----------  -------------  ----------
AUD       -504,561.00  256,442.00     30/01/2013
CHF       268,243.00   -4,456,421.00  30/01/2013
GBP       2,204.00     15,246.00      30/01/2013
JPY       -552.00      1,243,146.00   30/01/2013
USD       5,242.00     -              30/01/2013
4

1 に答える 1

0

編集: 左外部結合を使用すると、テーブル a のすべてとテーブル b の一致する値を取得し、テーブル b にデータがない場合に NULL を持つことができます。ISNULL() 関数を使用して、NULL 値をチェックし、見つかった場合は選択した別の値に置き換えることで、よりクリーンな結果を得ることができます。

select
  a.Currency
, a.Spot
, a.Exposure as a_Exposure
, ISNULL(b.Exposure, 0) as b_Exposure
, a.Fixing
from a
left outer join b 
   on b.Currency = a.Currency
   and b.Fixing = a.Fixing
where a.Fixing = '2013-01-30';

Clockwork-Muse からの提案を反映するようにクエリを変更しました。データを返す列を追加する必要があります。

于 2013-01-30T16:38:10.187 に答える