2014-01-16 191 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