2013-06-26 7 views
-1

부울을 기반으로 두 조건 또는 적어도 둘 중 하나를 만족하는 행을 선택하는 쿼리를 작성하려고합니다.SQL 쿼리 정리 및/또는 조건에 따라

다음은 작업을 완료하는 간단한 쿼리입니다. 즉, 쿼리의 where 절이 훨씬 더 복잡하므로 더 쉽게 읽을 수있는 방식으로 다시 작성할 수있는 방법을 찾고 있습니다.

이것이 가능합니까?

declare @AndParam bit 
set @AndParam = 1 

SELECT * FROM Table 

    Where 
    (@AndParam = 1 
    AND 
    (Table.CategoryID = 3 
    AND 
    Table.Age < 30)) 

    OR 

    (@AndParam = 0 
    AND 
    (Table.CategoryID = 3 
    OR 
    Table.Age < 30)) 

편집 :
이 질문은 정말 가독성과 심미성에 관한 것입니다.
Table.Age < 30 대신 하위 쿼리를 포함한 5 개의 추가 검사가 있습니다. 실질적으로 이것은 하나의 차이만으로 코드의 큰 부분을 복제했다는 것을 의미합니다. 및/또는.
SQL을 읽기가 어려울 때를보기 위해 나는 그것을 고치려고합니다.

+0

제 생각에, 이것은 최소한의 조항 집합이며 더 이상 줄일 수 없습니다. '@ AndParam'이 boolean이면'@ AndParam'과'NOT @ AndParam'을 쓸 수 있습니다. 그러나 그것은 단지 구문적인 설탕입니다. – nif

답변

0
이 같은

아마 뭔가 : 당신은 기본적으로 각 조건을

Where 
    CASE WHEN Table.CategoryID = 3 THEN 1 ELSE 0 END + 
    CASE WHEN Table.Age < 30 THEN 1 ELSE 0 END -- + more CASEs for each condition 
    >= 
     CASE WHEN @AndParam = 1 THEN 2 ELSE 1 END 
     --For more conditions, change 2 above to however many conditions there are 

가 당신에게 1 또는 0, 다음이 최대의 모든 추가 - 당신이 명중 여부에 @AndParam에 따라, 당신은 최종 검사를 수행하십시오 조건의 총 수 또는 적어도 1

+0

감사합니다. 이것이 성능에 영향을 주는지 살펴보고 싶습니다. –