2014-01-16 226 views
0

我用下面的查詢工作,我被困條件WHERE子句與case語句

SELECT 
    @siteID = Site.siteID, 
    @customerID = Customer.customerID 
FROM 
    Customer 
    inner join Site on Customer.siteID = Site.siteID 
WHERE 
    Site.phoneNumber = @vaultID 
    and Customer.clientID = @clientID 

一些Customer.clientID領域正在從四個字符字段更新爲八個字符的領域,前:'1234'變成'1234 01'。客戶將始終輸入四個字符的ID。根據他們記錄的siteID,我需要修改查詢,以便它只讀取ID的前四個字符。所以我一直在嘗試在where子句中加入這個:

AND 
CASE 
    WHEN Site.siteID IN ('1T','1Q') 
    THEN RTRIM(LTRIM(SUBSTRING(Customer.clientID ,1,6)))= @clientID 
ELSE 
    Customer.clientID = @clientID 
END 

但我沒有太多的運氣。到目前爲止,我所做的研究讓我相信在where子句中的case語句並不是一個好主意,但我覺得我在這裏很接近。我知道在進行這個調用之前我可以完全獨立的調用網站表格,但我真的想在一個聲明中得到這個,希望這是可能的。

+0

爲什麼不使用動態SQL .... – logixologist

+0

動態SQL在這裏是被禁止的恐怕。這是我寧願去的方式。 – TrevorGoodchild

回答

3

case語句應該是這樣的:

CASE 
    WHEN Site.siteID IN ('1T','1Q') 
    THEN RTRIM(LTRIM(SUBSTRING(Customer.clientID ,1,6))) 
    ELSE Customer.clientID 
END = @clientID 

你不這樣做comparisson機箱內部,而使用的情況下讓你,你可以比較的價值。

+0

這太令人沮喪了,我一直忘記那個細節,這是一個很大的細節。謝謝湯姆,巨大的幫助。 – TrevorGoodchild