문제

@startdate 및 @enddate의 몇 가지 매개 변수를 수락하는 spgetorders라는 저장된 절차가 있습니다. 이것은 "주문"테이블을 쿼리합니다. 테이블의 열 중 하나를 "ClosedDate"라고합니다. 주문이 닫히지 않았거나 날짜 값이있는 경우이 열은 NULL을 유지합니다. @closed 매개 변수를 추가하여 비트 값을 추가하고 싶습니다. 단순한 세상에서 나는 할 수있을 것이다 ..

select * from orders o
where o.orderdate between @startdate AND @enddate
and (if @Closed = 1 then o.ClosedDate IS NULL else o.ClosedDate IS NOT NULL)

분명히, 그것은 작동하지 않을 것입니다 .. 나는 또한 나의 최후의 수단 인 Dynamic SQL을보고 있지만 대답처럼 보이기 시작합니다 ..

도와주세요..

도움이 되었습니까?

해결책

이 시도:

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 And o.ClosedDate IS NULL) Or (@Closed = 0 And o.ClosedDate IS NOT NULL))

WHERE 절에서 혼합 및 또는 또는 또는 또는 또는 또는 또는 또는 또는 또는 또는 또는 또는 또는 또는 OR에 대해 조심해야합니다. 이를 수행 할 때 평가 순서를 제어하기위한 괄호는 매우 중요합니다.

다른 팁

SQL 문 :

SELECT *  
FROM orders  
WHERE orderdate BETWEEN @startdate AND @enddate  
AND (@Closed = 1 OR CLosedDate IS NOT NULL)

아니면 이거:

select * from orders o
where o.orderdate between @startdate AND @enddate
and (  (@Closed = 1 AND o.ClosedDate IS NULL)
     OR (ISNULL(@Closed, 0) <> 1 AND o.ClosedDate IS NOT NULL)
     )

근접 정보가 일관되지 않은 두 날짜 사이의 모든 주문을 원하는 것 같습니다. 다른 제안은 아마도 좋거나 더 나은 일이지만, 나는 이것이 효과가 있고 나에게 읽을 수 있다고 확신합니다 (다른 제안의 대부분은 내가 입력 할 때 나타났습니다).

행운을 빕니다!

기본적으로 작성하십시오.

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 and o.ClosedDate IS NULL)
    or (@Closed != 1 and o.ClosedDate IS NOT NULL))

이중, 제거 할 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top