2014-08-31 61 views
0

我正在使用以下查询。在这个查询中,我想根据传递的参数应用where子句。但问题是,where子句是像“值=如果parameterVal =‘我’比其他NULL NOT NULL”在SQL中声明时的情况

我已经建立这样

SELECT * FROM MASTER 
WHERE 
Column1 IS (CASE WHEN :Filter = 'I' THEN 'NULL' ELSE 'NOT NULL' END) 

查询,但它不工作。帮我解决这个问题。

UPDATE

更新的问题更清楚地阐述问题。

我有一个表MASTER。现在,我在查询中传递一个参数Filter(表示为:Filter in query)。

现在当Filter参数的值为'I'时,它应该返回以下结果。

SELECT * FROM MASTER WHERE Column1 IS NULL 

但如果传递的参数不等于“我”不是,

SELECT * FROM MASTER WHERE Column1 IS NOT NULL 

回答

4
SELECT * FROM MASTER 
WHERE (Filter = 'I' AND Column1 IS NULL) 
    OR 
     (Filter <> 'I' AND Column1 IS NOT NULL) 
+0

感谢您的回答。这并没有按预期返回结果。为了进一步说明,我更新了问题。 – 2014-08-31 16:31:34

+0

现在看看我已经更新了答案。你应该已经掌握了从以前的解决方案的主要想法,这真的不是这个难:) – 2014-08-31 16:40:24

+0

我应该有,但我没有得到它:)。非常感谢你的回答和你的时间。 – 2014-09-01 03:43:50

-3

你的个案分配不公平检查

+1

声明中没有“转让”。 – 2014-08-31 10:41:53

1

如果你真的坚持使用CASE SELECT可以改写为:

SELECT * 
    FROM MASTER 
    WHERE CASE 
      WHEN COLUMN1 IS NULL AND FILTER = 'I' THEN 1 
      WHEN COLUMN1 IS NOT NULL AND FILTER <> 'I' THEN 1 
      ELSE 0 
     END = 1 

SQLFiddle here

坦率地说,我认为这很难解释,我建议@MAli的版本更好。

+0

感谢您的回答。这并没有按预期返回结果。为了进一步说明,我更新了问题。 – 2014-08-31 16:30:59

+0

感谢您的回答。虽然它的工作,我去了M.Ali的答案。非常感谢您的时间。 – 2014-09-01 03:42:46