簡體   English   中英

WHERE子句中的CASE表達式選擇不為NULL的行

[英]CASE expression in WHERE clause selecting rows that are not NULL

我正在嘗試編寫一個查詢,該查詢在傳遞兩個變量時,第一組為數字1-4,第二組為1-2。 我只選擇符合條件的行。 到目前為止,我已經提出了這個建議,現在我對如何用結果調用行有些迷茫。

DECLARE @Task INT 
DECLARE @Status INT 

SET @Task = 1 --Test Values can be 1,2,3,4
SET @Status = 1 -- Test Values can be 1,2

SELECT  
     Pics
    ,Title
    ,Photos
    ,Reports
FROM    
    DATES
WHERE   
    CASE 
       WHEN @Task = 1 AND @Status = 1 THEN Pics IS NOT NULL
       WHEN @Task = 2 AND @Status = 1 THEN Title IS NOT NULL 
       WHEN @Task = 3 AND @Status = 1 THEN Photos IS NOT NULL
       WHEN @Task = 4 AND @Status = 1 THEN Reports IS NOT NULL              
       ELSE NULL
    END

示例數據:這是我正在使用的目的。

我有2個下拉框,其中一個稱為“任務”,其中包含4個值的圖片,報告,照片,標題。

第二個盒子存放已完成或未完成的1或2

調用此查詢時,我將顯示所有4個報告,標題,圖片,照片,但是如果我想查看所有已完成的報告,則可以選擇報告值,然后選擇完整選項卡。 示例(任務)報告= 3和(狀態)完成= 1。

給我所有已完成的報告,即使它們為空,仍顯示其他三個值。

您想要的是永遠簡單的AND / OR:

DECLARE @Task INT 
DECLARE @Status INT 

SET @Task = 1 
SET @Status = 1

SELECT  
     Pics
    ,Title
    ,Photos
    ,Reports

FROM    DATES

WHERE @Status = 1
AND (
        (@Task = 1 AND Pics IS NOT NULL)
    OR
        (@Task = 2 AND Title IS NOT NULL)
    OR
        (@Task = 3 AND Photos IS NOT NULL)
    OR
        (@Task = 4 AND Reports IS NOT NULL) 
    )

使用@JohnHC示例並解決了這個問題。 畢竟,我使用了CASE,因為它可以完成我需要做的事情。 這是完成的代碼。 感謝您提供的所有信息和幫助! 如果您認為還有另一種方法,請告訴我。

DECLARE @Task INT 
DECLARE @Status INT 

SET @Task = 1 --Test Values can be 1,2,3,4
SET @Status = 1 -- Test Values can be 1,2

SELECT  
      Pics
     ,Title
     ,Photos
     ,Reports
FROM    
      DATES

WHERE   1 = CASE WHEN @Task = 1 AND @Status = 1 AND Pics IS NOT NULL THEN 1 ELSE 0 END
      OR
        1 = CASE WHEN @Task = 1 AND @Status = 2 AND Pics IS NULL THEN 1 ELSE 0 END
      OR
        2 = CASE WHEN @Task = 2 AND @Status = 1 AND Reports IS NOT NULL THEN 2 ELSE 0 END
      OR
        2 = CASE WHEN @Task = 2 AND @Status = 2 AND Reports IS NULL THEN 2 ELSE 0 END
      OR
        3 = CASE WHEN @Task = 3 AND @Status = 1 AND Photos IS NOT NULL THEN 3 ELSE 0 END
      OR
        3 = CASE WHEN @Task = 3 AND @Status = 2 AND Photos IS NULL THEN 3 ELSE 0 END
      OR
        4 = CASE WHEN @Task = 4 AND @Status = 1 AND Title IS NOT NULL THEN 4 ELSE 0 END
      OR
        4 = CASE WHEN @Task = 4 AND @Status = 2 AND Title IS NULL THEN 4 ELSE 0 END
END

暫無
暫無

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

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