2017-04-18 62 views
0

我必須在SQL中執行請求。我有論文表CASE加入SQL Server

enter image description here

我願意做這個請求,但請求從來沒有給我的結果:

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 

我也試過

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' 

但相同的結果,該請求似乎正在工作,但不成功。

感謝您的幫助!

更新:它現在與聯盟工作! Thnak爲您提供幫助!

+0

當你可以用簡單的'AND' /'OR'來做同樣的事情時,你不應該使用'CASE'。但是,要找出您的情況失敗的地方,請一步一步來。例如:'從dbo.t_cdr_appel中選擇cdr_loc_code如'CH%'和cdr_type'I%''並查看是否有任何記錄。如果是這樣,你會得到什麼CDR_LOC_CODE?它們存在於dbo.POS中嗎? –

+0

CDR_LOC_CODE存在於dbo.POS中! – Alexandre

+0

所以我的查詢返回記錄?並且它返回與Pos.Loc_Code相匹配的CDR_LOC_CODE?那很奇怪你的查詢沒有得到那些匹配。那時必須是一個錯字。 –

回答

1

跳過case表達,使用AND/OR代替:

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) 

一般來說,最好在ONWHERE條款使用的AND/OR代替case表達式。

+0

同樣的結果,請求似乎正在工作,但不成功。也許請求是服務器的時間太長 – Alexandre

+0

嘗試一些更「放鬆」的條件,看看你是否至少得到了一些結果。如果你例如刪除LIKE部分? – jarlh

+0

但是我知道使用內部連接或條件是不好的,不是嗎? – Alexandre