簡體   English   中英

SQL Case語句以確定過濾器

[英]SQL Case Statement to Determine Filter

我在這里有這個問題。 我正在嘗試使用一個case語句來確定要使用的過濾器。 可以將其用於單個值,但不能使用Select語句結果。

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語句中獲取多個值。

謝謝。

也許像:

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 )
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM