2012-03-29 2 views
2
DECLARE @MinPV MONEY   -- PSV 
DECLARE @MaxPV MONEY   -- PSV 
DECLARE @MinGV MONEY   -- GV 
DECLARE @MaxGV MONEY   -- GV 
DECLARE @MinLBV MONEY   -- LBV 
DECLARE @MaxLBV MONEY   -- LBV 
DECLARE @MinRBV MONEY   -- RBV 
DECLARE @MaxRBV MONEY   -- RBV 
SET @MinPV = 5     -- PSV 
SET @MaxPV = 0     -- PSV 
SET @MinGV = NULL    -- GV 
SET @MaxGV = NULL    -- GV 
SET @MinLBV = NULL    -- LBV 
SET @MaxLBV = NULL    -- LBV 
SET @MinRBV = NULL    -- RBV 
SET @MaxRBV = NULL    -- RBV 

SELECT psv,* 
FROM Distributordetail 
WHERE 
    (PSV BETWEEN @MinPV AND @MaxPV) OR   -- Both @MinVol and @MaxVol supplied 
    (PSV > @MinPV AND @MaxPV IS NULL) OR  -- Only @MinVol supplied 
    (PSV < @MaxPV AND @MinPV IS NULL) OR  -- Only @MaxVol supplied 

WHERE 절에 4 개의 행이 있습니다. 전달할 수있는 각 매개 변수에 대해 더 많은 행을 추가해야합니다. 더 좋은 방법이 있는지 알려주시겠습니까? EDITED이 SQL 쿼리를 수행하는 더 좋은 방법이 있습니까?

:

(PSV BETWEEN @MinPV AND @MaxPV) OR   -- Both @MinVol and @MaxVol supplied 
(PSV > @MinPV AND @MaxPV IS NULL) OR  -- Only @MinVol supplied 
(PSV < @MaxPV AND @MinPV IS NULL) OR  -- Only @MaxVol supplied 
(@MinPV IS NULL AND @MaxPV IS NULL)   -- Neither @MinVol and @MaxVol supplied 
(GSV BETWEEN @MinGV AND @MaxGV) OR   -- Both @MinVol and @MaxVol supplied 
(GSV > @MinGV AND @MaxGV IS NULL) OR   -- Only @MinVol supplied 
(GSV < @MaxGV AND @MinGV IS NULL) OR   -- Only @MaxVol supplied 
(@MinGV IS NULL AND @MaxGV IS NULL)   -- Neither @MinVol and @MaxVol supplied 

답변

4

선언 2 추가 변수는 min and max values for the MONEY data type 포함하고 NULL 이러한 값을 대체한다.

편집 :

DECLARE @MoneyMin MONEY 
DECLARE @MoneyMax MONEY 

SET @MoneyMin = -922,337,203,685,477.5808 
SET @MoneyMax = 922,337,203,685,477.5807 

IF (@MinPV IS NOT NULL OR @MaxPV IS NOT NULL) 
    SELECT @MinPV = ISNULL(@MinPV, @MoneyMin), @MaxPV = ISNULL(@MaxPV, @MoneyMax) 

IF (@MinGV IS NOT NULL OR @MaxGV IS NOT NULL) 
    SELECT @MinGV = ISNULL(@MinGV, @MoneyMin), @MaxGV = ISNULL(@MaxGV, @MoneyMax) 

SELECT psv,* 
FROM Distributordetail 
WHERE 
    (PSV BETWEEN @MinPV AND @MaxPV) OR 
    (GSV BETWEEN @MinGV AND @MaxGV) 
+0

내가 할 수 있습니다 : 당신이 두 매개 변수가 NULL을 경우 결과를 제외 할 때문에, 나는 @MoneyMin 또는 @MoneyMaxNULL에서 매개 변수 값을 변경하기 전에 쿼리 전에 조건부 검사를 수행 할 이걸로 일해라. 약간 놀아 줘서 고마워. –

+0

이것이 내가 필요한 것을 위해 잘 작동하는지 모르겠다. 또 하나의 부분을 달성하는 좋은 방법이다. 전달할 수있는 8 개의 매개 변수가 있지만 PV 매개 변수를 전달하지는 않지만 GV 매개 변수를 전달하는 경우 PV에 대해 표시하지 않고 GV로 표시해야합니다. 설치 방식에 관계없이 PV를 전달하는지 여부에 관계없이 항상 PV가 표시됩니다. –

+0

@JamesWilson 죄송합니다, 혼란 스러워요 ... 당신은 아무것도 PV에 전달되지 않는 경우 PV 기록을 포함하고 싶지 않다고 말하지만, 귀하의 예에서는 당신은 'OR (@MinPV IS NULL 및 @MaxPV IS NULL)'... 당신이 묘사하는 것과 정반대의 것을 시도하고 있습니다. –

관련 문제