2012-03-29 115 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行,我需要爲每個可以傳入的參數添加更多的行。誰能告訴我是否有更好的方法呢?有沒有更好的方法來完成這個SQL查詢?

EDITED:

(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,我就從NULL參數值更改爲@MoneyMin@MoneyMax之前執行查詢前一個條件檢查與此合作。要玩一下,謝謝。 – 2012-03-29 19:22:29

+0

我不確定這是否能滿足我的需求,但它是完成其中一部分的好方法。有8個參數可以通過,但如果他們沒有通過PV參數但通過GV參數,我不需要爲PV顯示任何內容,並將其顯示給GV。它的設置方式總是會向他們顯示PV,無論他們是否通過PV。 – 2012-03-29 19:35:11

+0

@JamesWilson對不起,我很困惑......你說如果沒有傳入PV,你不想包含PV記錄,但在你的例子中你有'OR(@MinPV IS NULL AND @MaxPV IS NULL )'......這是試圖做你所描述的相反.. – 2012-03-29 20:02:43

相關問題