2014-01-16 2 views
0

와 절 내가 붙어있어 WHERE 조건나는 다음과 같은 쿼리 함께 일하고 경우 문

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'이됩니다. 고객은 항상 4 자의 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

사례 문은 다음과 같이한다 : 당신은 오히려 케이스 내부 comparisson을 당신에게 당신이 비교할 수있는 가치를 얻기 위해 CASE를 사용하지 않는

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

.

+0

너무 실망 스럽기 때문에, 나는 그 세부 사항을 잊어 버리고 큰 문제입니다. Tom, 큰 도움을 주셔서 감사합니다. – TrevorGoodchild

관련 문제