2016-09-02 4 views
0

Ich habe eine gespeicherte Prozedur wie dieseVerwendung Wenn zu identifizieren, welche innere Verknüpfung sollte ich verwendet

Select Name, Identifier, ReferenceId, ReferenceAccountId 
FROM Test 

Und bevor ich die innere Verknüpfung starten, ich habe ein Feld Identifier benannt. Wenn dies 1 ist, werde ich die innere Verbindung ref_reference1 verwenden, sonst werde ich die andere verwenden.

INNER JOIN Ref_Reference1 ON Ref_Reference1.ReferenceId = Test.ReferenceId 
INNER JOIN Ref_Reference2 ON Ref_Reference2.ReferenceId = Test.ReferenceId 

Wie kann ich das lösen?

Antwort

4

Sie dies nicht tun. Sie können die "Form" der Abfrage nicht ändern, ohne dynamisches SQL zu verwenden. Dies sollten Sie nach Möglichkeit vermeiden.

Stattdessen können Sie zwei linke tun verbindet:

LEFT JOIN Ref_Reference1 ON 
    Ref_Reference1.ReferenceId = Test.ReferenceId 
    AND Test.Identifier = 1 
LEFT JOIN Ref_Reference2 ON 
    Ref_Reference2.ReferenceId = Test.ReferenceId 
    AND Test.Identifier <> 1 

Sie werden feststellen, dass Sie jetzt auch einen starken Vorteil haben - Sie können Referenz diese Tabellen an anderer Stelle in der Abfrage (wie hatten Sie zu damit in Ihrem Vorschlag umgehen?)

+0

es funktioniert. Danke :) Gott segne – Muj

3

können Sie versuchen, zwei links mit Zustand verbindet und überprüfen

Select 
    Name, Identifier, ReferenceId, ReferenceAccountId, 
    ISNULL(Ref_Reference1.ReferenceId,Ref_Reference2.ReferenceId) 
FROM Test 
LEFT OUTER JOIN Ref_Reference1 ON Ref_Reference1.ReferenceId = Test.ReferenceId AND Identifier = 1 
LEFT OUTER JOIN Ref_Reference2 ON Ref_Reference2.ReferenceId = Test.ReferenceId AND Identifier <> 1 
+0

in dieser Antwort, die ich die ISNULL benutzt habe. . . und es dem Knecht Damien liefern. dann funktioniert meine Abfrage gut. dank deiner Bemühungen. Gott segne sir :) – Muj

2

Es gibt nichts in der Sprache, die es erlaubt, wie ich denke, Sie wollen. Wenn jedoch die Struktur der beiden Ergebnisse identisch ist, können Zwischenergebnisse gespeichert werden.

if ... 
    select ... 
    into #result 
    from ... join reference1 
else 
    select ... 
    into #result 
    from ... join reference2 

aber es ist nicht schön ...

+0

ja ich denke. aber dank deiner Bemühungen :) Gott segne – Muj

Verwandte Themen