2010-03-09 112 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