2016-01-29 73 views
0

我在這裏遇到此問題。我正在嘗試使用case語句來確定使用哪個過濾器。將它用於單個值是可以的,但不能使用Select Statement結果。確定篩選器的SQL病例聲明

 
DECLARE @SingleValue INT = 0 

SELECT 
    t1.Field1 
    , t1.Field2 
    , t1.Field3 
FROM 
    tblTable1 t1 
    INNER JOIN tblTable2 t2 ON t1.Field1 = t2.Field 
WHERE 
    t1.Field2 IN (SELECT CASE WHEN @SingleValue = 0 THEN (SELECT Field1 FROM tblTable3) ELSE t1.Field2 END) 
    AND t2.Field2 = (CASE WHEN @SingleValue = 0 THEN t2.Field2 ELSE @SingleValue END) 

一旦@singleValue被設定爲值「123」則當我將值設置爲工作正常,在時刻「0」(零),那麼它返回一個錯誤「子查詢返回多個1值。當子查詢遵循=,!=,<,< =,>,> =或子查詢用作表達式時,這是不允許的。

該問題從case語句中的'(SELECT Field1 FROM tblTable3)'開始。我怎樣才能解決它在case語句中獲取多個值。

謝謝。

+1

使用和/或代替如果情況... – jarlh

+0

你有沒有考慮增加一個'LIMIT'? – SZenC

+1

「在案例陳述中獲得多個值」 - 你不知道。一個'CASE' *表達式*,與SQL中的其他表達式共同使用,旨在產生一個*單個*值(針對它的每一行進行評估) –

回答

0

也許是這樣的:

DECLARE @SingleValue INT = 0 

SELECT 
    t1.Field1 
    , t1.Field2 
    , t1.Field3 
FROM 
    tblTable1 t1 
    INNER JOIN tblTable2 t2 ON t1.Field1 = t2.Field 
WHERE 
    (
     (@SingleValue <> 0) 
     or 
     (t1.Field2 IN (SELECT Field1 FROM tblTable3)) 
    ) 
    and 
    (
     (@SingleValue = 0) 
     or 
     (t2.Field2 = @SingleValue) 
    ) 
+0

謝謝,這解決了我的問題 – juniorf

+0

@juniorf歡迎您的朋友! – shadow