我正在使用以下查询。在这个查询中,我想根据传递的参数应用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
答案 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
坦率地说,我认为这很难解释,我建议@ MAli的版本更好。
答案 2 :(得分:-3)
你的案件有分配而不是平等检查