2013-01-04 2 views
2

이 문장이 의미있는 것인지 확실하지 않은 경우, 기존 sproc을 편집하여 "Where"절에 변수를 추가하여 모든 값 반환, 값 없음 또는 모든 레코드 반환 값의.사례 명세서 여러 사례 값

Where 절의 Case When/Then 문을 사용하고 있습니다.

WHERE 
     CASE (@work) 
    WHEN 'Y' THEN part.corpid = ('Work EMP' , 'Work EMP 10' , 'Work FAM') 
    WHEN 'N' THEN part.corpid != ('Work EMP' , 'Work EMP 10' , 'Work FAM') 
    ELSE part.corpid = * 
    END 

셋업은 N 다음 더 리턴 어떤 직원 또는 그 가족을하지 않는 경우의 Y는, 만 직원과 그 가족을 반환하는 경우, 그리고 변수에 NULL 있다면, 모든 것을 돌려줍니다.

내가 여기서 망쳐 놓고 있다는 것을 알지 못한다. 나는 Y 섹션에서 오류가 계속 발생한다. 다음 WHERE 절을 사용할 수 있어야

+0

사용하고있는 데이터베이스? – LittleBobbyTables

답변

8

:

WHERE 
(
    @work = 'Y' 
    AND part.corpid IN ('Work EMP' , 'Work EMP 10' , 'Work FAM') 
) 
OR 
(
    @work = 'N' 
    AND part.corpid NOT IN ('Work EMP' , 'Work EMP 10' , 'Work FAM') 
) 
OR 
(
    @work is null 
    -- add other filters here if needed 
    -- no need to include the part.corpid because all will be included 
) 
+0

고마워요! 나는 그것이 모두 망쳐 놓은 줄 알았다. 그러나 분명히 나는하지 않았다. – user1949329

+0

사례 명세서로이 작업을 수행 할 수 있습니까? – dj18

+0

@ dj18 아마도 그렇게 할 수 있습니다. 'CASE' 문이 필요합니까? 때로'WHERE' 절이 훨씬 쉽습니다. – Taryn

0

이 오라클의 예 :

CASE grade 
    WHEN 'A' THEN dbms_output.put_line('Excellent'); 
    WHEN 'B' THEN dbms_output.put_line('Very Good'); 
    WHEN 'C' THEN dbms_output.put_line('Good'); 
    WHEN 'D' THEN dbms_output.put_line('Fair'); 
    WHEN 'F' THEN dbms_output.put_line('Poor'); 
    ELSE dbms_output.put_line('No such grade'); 
END CASE;