想象一下,我们有2个表A
和B
,具有相同的结构,如下所示:
Currency
,Spot
,Exposure
,Fixing
。
我们希望加入这两个表,以便查询,例如Fixing = '2013-01-03'
并拥有主要货币列表(A
中的货币与货币中的货币之间并不总是对应B
)。
A.Fixing = B.Fixing
A.Currency = B.Currency
(还返回货币值不匹配)这是一个例子:我们在请求的那一天有A
表中的美元货币,但我们没有在表B上。我们当天想要的是一个连接表,其中有一行带有USD然后是表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
答案 0 :(得分:0)
EDITED:左外连接允许您获取表a中的所有内容并匹配表b中的值,并且在表b中没有数据时具有NULL。使用ISNULL()函数通过检查NULL值为您提供更清晰的结果,如果找到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的建议。您需要添加要返回数据的任何列。