2010-03-09 4 views
2

Je voudrais décider interne ou externe rejoindre (à la même table) en fonction de la valeur. Comment est-ce que je fais ceci? Merciserveur sql jointure interne ou externe conditionnel

J'ai toutes mes valeurs de sélection ici Puis groupe de jointures Et le dernier join je voudrais faire

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

Si vous voulez de l'aide, ce serait une bonne idée d'accepter un pourcentage plus élevé de vos réponses. Pourquoi quelqu'un serait motivé pour vous aider quand vous n'acceptez que 20%? – mwigdahl

+0

Que faire si les réponses ne résolvent pas mon problème? – user228777

+0

Placez une prime dessus. – JonH

Répondre

1

Vous utilisez juste un if/else condition relative à l'instruction SQL completly:

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

C'est ce que je fais en ce moment mais je pensais que je devais changer seulement la dernière jointure selon la valeur ainsi si je peux faire la jointure conditionnelle ce serait une grande aide .. Merci – user228777

1

Que diriez-vous:

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

Notez qu'en vérifiant IsActive = 1 sur une jointure à gauche, cela signifie en fait qu'une ligne doit exister et donc, lorsque @AccountType n'est pas OFX, il utilisera effectivement une jointure interne.

+0

Comment ce code fonctionnera comme jointure interne et jointure externe? dès maintenant quand je colle votre code, il me donne une erreur sur <> signe et IsActive = 1. Quand @AccountType = 'OFX' comment cela fonctionnera comme une jointure interne? – user228777

+0

Une parenthèse fermante est manquante avant le <>. – DyingCactus

+0

J'ai ajouté la parenthèse manquante. Notez que je vérifie quand @AccountType n'est pas égal à OFX. Lorsque IsActive = 1 est votre condition de jointure interne. – Thomas