SQL语句中的case语句

时间:2014-08-31 10:23:06

标签: sql oracle

我正在使用以下查询。在这个查询中,我想根据传递的参数应用where子句。但问题是where子句就像' value = if parameterVal =' I'比NULL其他NOT NULL'

我已经构建了这样的查询

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

但它没有用。帮我解决这个问题。

更新

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

我有一张桌子MASTER。现在我在查询中传递一个参数Filter(表示为:查询中的Filter)。

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

SELECT * FROM MASTER WHERE Column1 IS NULL

但如果传递的参数不等于'我'比,

SELECT * FROM MASTER WHERE Column1 IS NOT NULL

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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的版本更好。

答案 2 :(得分:-3)

你的案件有分配而不是平等检查