带有case语句的条件WHERE子句

时间:2014-01-16 15:24:21

标签: sql

我正在使用以下查询,而且我遇到了

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语句开头并不是一个好主意,但我觉得我离这里很近。我知道在进行此调用之前我可以对站点表进行完全独立的调用,但我真的想在一个语句中得到它,希望这是可能的。

1 个答案:

答案 0 :(得分:3)

案例陈述应如下所示:

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

你没有在CASE中做comparisson,而是使用CASE来获得你可以比较的值。