2017-04-18 11 views
0

Ich muss eine Anfrage in SQL machen. Ich habe Thesen TabellenCASE Beitreten in SQL Server

enter image description here

Ich mag diese Anfrage tun, aber die Anforderung nie mir Ergebnisse senden:

Select CDR.*, 
    p1.* 
From dbo.T_CDR_APPEL CDR 
    Inner Join dbo.POS As p1 On Case 
     When CDR.CDR_LOC_CODE Like 'CH%' And CDR.CDR_TYPE Like 'I%' And 
     CDR.CDR_LOC_CODE = p1.Loc_Code Then 1 
     When CDR.CDR_LOC_CODE Like 'CCN%' And CDR.CDR_TYPE Like 'I' And 
     CDR.CDR_LAST_REDIR_NO = p1.Post_type Then 1 Else 0 End = 1 

Ich habe auch versucht

Select CDR.*, 
    p1.* 
From dbo.T_CDR_APPEL CDR 
    Inner Join dbo.POS As p1 On CDR.CDR_LOC_CODE = p1.Loc_Code 
Where CDR.CDR_LOC_CODE Like 'CH%' And CDR.CDR_TYPE Like 'I%' 
Union All 
Select CDR.*, 
    p1.* 
From dbo.T_CDR_APPEL CDR 
    Inner Join dbo.POS As p1 On CDR.CDR_LAST_REDIR_NO = p1.Post_type 
Where CDR.CDR_LOC_CODE Like 'CCN%' And CDR.CDR_TYPE Like 'I' 

Aber gleiches Ergebnis, Die Anfrage scheint zu funktionieren, ist aber nicht erfolgreich.

Danke für Ihre Hilfe!

UPDATE: Es funktioniert jetzt mit einer Union !! Thnak für deine Hilfe!

+0

Sie sollten 'CASE' nicht verwenden, wenn Sie dasselbe mit dem einfachen' AND'/'OR' machen können. Um herauszufinden, wo Ihre Bedingungen fehlschlagen, gehen Sie Schritt für Schritt vor. Beispiel: Wählen Sie aus dbo.t_cdr_appel, wobei cdr_loc_code wie 'CH%' und cdr_type wie 'I%' aussieht und sehen Sie, ob Sie irgendwelche Datensätze bekommen. Wenn ja, welche CDR_LOC_CODEs erhalten Sie? Existieren sie in dbo.POS? –

+0

CDR_LOC_CODE existiert in dbo.POS ja! – Alexandre

+0

Also meine Abfrage gibt Datensätze zurück? Und es gibt CDR_LOC_CODE zurück, das mit Pos.Loc_Code übereinstimmt? Dann ist es seltsam, dass Ihre Suchanfrage diese Treffer nicht erhält. Wäre dann irgendwo ein Tippfehler. –

Antwort

1

überspringen case Ausdruck, AND/OR statt:

select CDR.*, 
     p1.* 
from dbo.T_CDR_APPEL CDR 
inner join dbo.POS As p1 
    on (CDR.CDR_LOC_CODE Like 'CH%' and CDR.CDR_TYPE Like 'I%' And 
     CDR.CDR_LOC_CODE = p1.Loc_Code) 
    or (CDR.CDR_LOC_CODE Like 'CCN%' and CDR.CDR_TYPE Like 'I' And 
     CDR.CDR_LAST_REDIR_NO = p1.Post_type) 

Es ist im Allgemeinen besser AND/OR statt case Ausdrücke in ON und WHERE Klauseln zu verwenden.

+0

Gleiches Ergebnis, die Anfrage scheint zu funktionieren, ist aber nicht erfolgreich. vielleicht ist die Anfrage zu lang für den Server – Alexandre

+0

Versuchen Sie ein bisschen mehr "entspannte" Bedingungen und sehen, ob Sie zumindest etwas Ergebnis erhalten. Was passiert, wenn Sie z.B. entferne die LIKE Teile? – jarlh

+0

Aber Il gelernt, dass Verwendung oder Bedingung in einem inneren Join ist schlecht, nicht wahr? – Alexandre