[英]SQL Query with condition in where clause
我寫了一個sql查詢,
DECLARE @TypeID BIGINT
--SET @TypeID=169
SELECT TypeID from TrnChecklist where TypeID IN
(CASE WHEN (@TypeID IS NOT NULL AND @TypeID <> '') THEN @TypeID
ELSE (select distinct TypeID from TrnChecklist where AuditID=57) END)
如果我提供@TypeID,它會給我記錄。 但是,如果我不提供@TypeID,則會給我錯誤
“子查詢返回的值大於1。當子查詢遵循=,!=,......時,不允許這樣做。”
但是我在其中使用條件的情況下使用“ TypeID IN”,因為“從TrnChecklist中選擇不同的TypeID,其中AuditID = 57”返回多個值
我的數據樣本(在TrnChecklist表中。其他幾列,但我僅使用這2個)
CASE表達式計算條件列表,並返回多個可能的結果表達式之一。
這是行不通的,因為您要在CASE表達式中為每個評估返回多個值,該表達式應為每個評估返回標量值。
如果將大小寫放在表數據上, 它將評估每一行以返回每行一個值 。
您可以在這里使用此查詢
SELECT TypeID FROM TrnChecklist WHERE TypeID IN
(SELECT TypeID FROM TrnChecklist
WHERE AuditID=57 AND (@TypeID IS NULL OR @TypeID = '')
UNION SELECT @TypeID)
我試圖在IN()中使用一個case表達式不太可能工作。 嘗試使用布爾邏輯。 您需要按參數指定值,還是希望IN()列表匹配。
DECLARE @TypeID bigint
--SET @TypeID=169
SELECT
TypeID
FROM TrnChecklist
WHERE (TypeID = @TypeID AND @TypeID IS NOT NULL AND @TypeID <> '')
OR ( NOT (TypeID = @TypeID AND @TypeID IS NOT NULL AND @TypeID <> '')
AND TypeID IN (SELECT DTypeID
FROM TrnChecklist
WHERE AuditID = 57)
)
可能仍有一些條件仍可以從上面的查詢中刪除,但我認為它會起作用。
注意,我已刪除了distinct。 通常,distinct的成本大於in列表的大小。 如果確實需要,請放回去。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.