2010-06-13 2 views
4

일부 데이터를 쿼리해야합니다. 여기에 내가 작성한 쿼리가 있지만 나를 위해 잘 작동하지 않습니다. 이 예제에서는 AdventureWorks 데이터베이스를 사용하고 있습니다.CASE 문을 사용한 여러 조건

SELECT * FROM [Purchasing].[Vendor] WHERE PurchasingWebServiceURL LIKE 
case 
// In this case I need all rows to be returned if @url is '' or 'ALL' or NULL 
when (@url IS null OR @url = '' OR @url = 'ALL') then ('''%'' AND PurchasingWebServiceURL IS NULL') 
//I need all records which are blank here including nulls 
     when (@url = 'blank') then (''''' AND PurchasingWebServiceURL IS NULL') 
//n this condition I need all record which are not like a particular value 
     when (@url = 'fail') then ('''%'' AND PurchasingWebServiceURL NOT LIKE ''%treyresearch%''') 
//Else Match the records which are `LIKE` the input value 
     else '%' + @url + '%' 
    end 

이것은 나를 위해 작동하지 않습니다. 어떻게 THEN에 동일한 조건절을 여러 개 넣을 수 있습니까? CASE? 이 작품을 어떻게 만들 수 있습니까?

답변

4

또 다른 방법 :

SELECT * FROM [Purchasing].[Vendor] WHERE 

     ((@url IS null OR @url = '' OR @url = 'ALL') and PurchasingWebServiceURL LIKE '%') 
    or 

     (@url = 'blank' and PurchasingWebServiceURL = '') 
    or 
     (@url = 'fail' and PurchasingWebServiceURL NOT LIKE '%treyresearch%') 
    or((@url not in ('fail','blank','','ALL') and @url is not null and 
      PurchasingWebServiceUrl Like '%'[email protected]+'%') 
END 
+0

왜 내가 CASE 문을 사용하여이 작업을 수행하려고하는지 궁금하게 생각합니다. 나는 내가 원하는대로 쿼리를 생성하기 위해 이것을 사용할 수 있다고 생각한다. 기본적으로 감사 – pavanred

+0

키우면 : (!의! 조건 1과 조건 2 및 조건 3 및 조건 4) 조건 1 또는 조건이 또는 조건 3 또는 없음 문제 =) – kamahl

4

잘라 내기 및 붙여 넣기가 아닙니다. CASE 표현식은 값을 반환해야하며 SQL을 포함하는 문자열 (기술적으로는 값이지만 잘못된 유형 임)을 반환합니다. 이것은 당신이 쓰고 싶다 무엇인가, 내 생각 :

SELECT * FROM [Purchasing].[Vendor] WHERE 
CASE 
    WHEN @url IS null OR @url = '' OR @url = 'ALL' 
    THEN PurchasingWebServiceURL LIKE '%' 
    WHEN @url = 'blank' 
    THEN PurchasingWebServiceURL = '' 
    WHEN @url = 'fail' 
    THEN PurchasingWebServiceURL NOT LIKE '%treyresearch%' 
    ELSE PurchasingWebServiceURL = '%' + @url + '%' 
END 
나는이 일부 방언에서 작동하지 않을 수 있습니다,하지만 인해하지 않도록, (오라클, 내가 당신을 찾고 있어요) 지금 테스트 할 수 없습니다 의심

불리언.

그러나 @url은 테이블 값에 종속되지 않으므로 세 가지 다른 쿼리를 만들고 매개 변수를 기반으로 평가할 대상을 선택하십시오. amadan에 따라

+1

감사 Amadan. SQL Server를 사용하고 있는데이 쿼리가 제대로 작동하지 않습니다. 구문 오류가 발생합니다. CASE 문을 이런 식으로 사용할 수 없습니다. 나는 이것을 시도했고 구문 오류가 있었기 때문에 where 문을 문자열로 구성하려고했지만 (이전에 질문에 게시 한 것처럼) 약간의 생각과 잘못을 만들 수 있지만 어떻게해야할지 모르겠다. 잘되도록하세요. – pavanred