0

假设我们有 2 个表,A并且B具有相同的结构,如下所示: CurrencySpotExposureFixing

我们想要连接这两个表,以便查询,例如,并拥有主要的货币列表(货币 in和货币 inFixing = '2013-01-03'之间并不总是对应)。AB

  • 1个条件:A.Fixing = B.Fixing
  • 2 条件:(A.Currency = B.Currency也返回不匹配的货币值)

这是一个示例:我们在表A中请求了当天的美元货币,但我们在表 B 上没有它。我们想要的那一天是一个连接表,其中一行包含美元,后跟表中的 Exposure 值A和后跟零(因为 ARS 不在表 B 中,因此它没有美元敞口)

我们如何编写查询?

下表和结果:

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 回答