문제
@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))
이중, 제거 할 수 있습니다
제휴하지 않습니다 StackOverflow