WHERE子句中的CASE表达式选择非NULL的行

时间:2016-10-06 14:18:39

标签: sql sql-server-2008

我尝试编写一个查询,当传递两个变量时,第一组是数字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个值Pics,报告,照片,标题。

第二个框保存完整或未完成的1或2

我在调用此查询时显示所有4个报告,标题,图片,照片,但如果我想查看完成的所有报告,我可以选择报告值,然后选择完整标签。示例(任务)报告= 3和(状态)完成= 1.

向我提供已完成的所有报告,并且即使它们为空,仍然显示其他3个值。

2 个答案:

答案 0 :(得分:4)

你想要的是永恒简单的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) 
    )

答案 1 :(得分:1)

使用了@JohnHC示例并对其进行了处理。毕竟我带着一个CASE,因为它做了我需要做的事情。这是完成的代码。感谢所有的信息和帮助!如果您认为还有其他方式,请告诉我。

project-1