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
我也許能:既然你要排除的結果,如果這兩個參數是
NULL
,我就從NULL
參數值更改爲@MoneyMin
或@MoneyMax
之前執行查詢前一個條件檢查與此合作。要玩一下,謝謝。 – 2012-03-29 19:22:29我不確定這是否能滿足我的需求,但它是完成其中一部分的好方法。有8個參數可以通過,但如果他們沒有通過PV參數但通過GV參數,我不需要爲PV顯示任何內容,並將其顯示給GV。它的設置方式總是會向他們顯示PV,無論他們是否通過PV。 – 2012-03-29 19:35:11
@JamesWilson對不起,我很困惑......你說如果沒有傳入PV,你不想包含PV記錄,但在你的例子中你有'OR(@MinPV IS NULL AND @MaxPV IS NULL )'......這是試圖做你所描述的相反.. – 2012-03-29 20:02:43