SQL 질문과 답변 게시판
다음과 같은 프로시져를 수행하면서 조건절의 조건을 다르게 해야 하는 상황이 되었습니다. 예를 들어서
if @kind = '1'
WHERE ORderID=@OrderID And storage=@storage And isNull(chk_fin, '')<>'Y' Order by GoodsID
if @kind='2'
WHERE ORderID=@OrderID And kind=@kind And isNull(chk_fin, '')<>'Y' Order by GoodsID
이렇게 조건절의 변화를 주고 싶습니다.
어떻게 하면 될런지 알고 싶습니다.
DECLARE cur_temp CURSOR FAST_FORWARD
FOR
SELECT GoodsID, GoodsOptID, Each_Qty, InvoiceNO, dev_Qty, OL.Num, Price
FROM order_GoodsList as OL left outer join Goods as G On OL.goodsID=G.num
WHERE ORderID=@OrderID And storage=@storage And isNull(chk_fin, '')<>'Y' Order by GoodsID
--커서 오픈
OPEN cur_temp
--변수 선언
DECLARE @GoodsID Int
-- 작업수행
--다음 로우 FEETCH - 루프
FETCH NEXT FROM cur_temp INTO @GoodsID
END
--커서 CLOSE
CLOSE cur_temp
--커서 DEALLOCATE
DEALLOCATE cur_temp
---#### 소거 끝
SELECT ...
FROM ...
WHERE (
( @kind = 1 AND ORderID=@OrderID And storage=@storage )
OR ( @kind = 2 AND ORderID=@OrderID And kind=@kind )
)
AND And isNull(chk_fin, '')<>'Y'
Order by GoodsID
@kind 가 1일때는 위쪽 Where 절이 , 2일때는 아래쪽 where 절이 적용되게 됩니다...


SELECT ...
FROM ...
WHERE @kind = 1 AND ORderID=@OrderID And storage=@storage And isNull(chk_fin, '')<>'Y' Order by GoodsID
UNION ALL
SELECT ...
FROM ...
WHERE @kind = 2 AND WHERE ORderID=@OrderID And kind=@kind And isNull(chk_fin, '')<>'Y' Order by GoodsID
이런식으로 UNION ALL 을 이용해서 풉니다.
WHERE 절을 보시면은 @KIND 값에 따라 분리후 SELECT문을 분리한후 UNION ALL로 합처줍니다.