2010-03-09 87 views
2

我想根据值决定内部或外部连接(对同一个表)。 我该怎么做? 感谢有条件的内部或外部连接sql服务器

我有所有我选择在这里值 然后一堆加入 并在最后加入我愿做

CASE 
WHEN RTRIM(LTRIM(@AccountType)) = 'OFX' THEN 
INNER JOIN Subscriber.Access.SubscriberOFXAccount ASOA 
       ON SSA.Id = ASOA.SubscriberOFXAccountId AND ASOA.Active = 1 
ELSE 
LEFT JOIN Subscriber.Access.SubscriberOFXAccount ASOA2 
       ON SSA.Id = ASOA2.SubscriberOFXAccountId 
+3

如果您需要帮助,接受更高百分比的答案将是一个不错的主意。当你只接受20%时,为什么有人会被激励来帮助你? – mwigdahl 2010-03-09 16:10:48

+0

如果答案没有解决我的问题,我该怎么办? – user228777 2010-03-09 16:17:04

+0

放一个赏金吧。 – JonH 2010-03-09 16:19:58

回答

1

你只需要使用一个if/else条件来弥补SQL语句完全地:

IF RTRIM(LTRIM(@AccountType)) = 'OFX' THEN 
BEGIN 
    SELECT Blah FROM Table WHERE Blah2=SomeThings INNER JOIN MyOtherFooBar ON ... 
END 
ELSE 
BEGIN 
    SELECT Blah FROM Table WHERE Blah2=SomeThings LEFT JOIN MyOtherFooBar ON ... 
END 
+0

这是我现在正在做的,但我认为我只需要根据值更改最后一次连接,所以如果我能够做条件连接,这将是一个很大的帮助。谢谢 – user228777 2010-03-09 16:26:37

1

如何:

Select .. 
From ... 
    Left Join Subscriber.Access.SubscriberOFXAccount ASOA 
     ON SSA.Id = ASOA.SubscriberOFXAccountId 
Where RTRIM(LTRIM(@AccountType)) <> 'OFX' Or ASOA.IsActive = 1 

请注意,通过在左连接上检查IsActive = 1,它实际上意味着行必须存在,因此,当@AccountType不是OFX时,它将有效地使用内连接。

+0

此代码如何作为内部连接和外部连接?现在当我粘贴你的代码时,它给我提供了<>符号和IsActive = 1的错误。 当@AccountType ='OFX'这将如何工作作为内部连接? – user228777 2010-03-09 16:41:45

+0

<>之前有一个右括号。 – DyingCactus 2010-03-09 16:59:52

+0

我添加了缺少的括号。注意我正在检查@AccountType不等于OFX。当IsActive = 1时是你的内部连接条件。 – Thomas 2010-03-09 17:23:24