case语句上的sql in()函数
Posted
技术标签:
【中文标题】case语句上的sql in()函数【英文标题】:sql in() function on case statement 【发布时间】:2013-06-03 22:26:52 【问题描述】:下面的代码对我不起作用,如果可能的话,我希望得到解决方法的帮助。
我正在尝试根据日期排除某些元素,但我没有运气。
到目前为止,我的代码看起来有点像这样:
SELECT CASE
WHEN date > '2013'
THEN element NOT IN ('e1', 'e2', 'e3') --exclude 3 elements
WHEN date > '2012' AND date <= '2013'
THEN element NOT IN ('e2', 'e3') --exclude 2 elements
WHEN date > '2011' AND date <= '2012'
THEN element NOT IN ('e3') --exclude 1 element
WHEN date <= '2011'
THEN element -- no elements excluded
END
FROM elementTable
这是伪代码。 sql 给出的错误是“NOT 语法不正确”。 我不完全确定为什么,但它似乎不喜欢我的 NOT IN 声明。
欢迎任何形式的提示、提示或帮助。
提前致谢。
【问题讨论】:
你用的是什么sql? MSSQL 或 mysql 【参考方案1】:试试这个。
SELECT CASE
WHEN [DATE] > '2013' AND element NOT IN ('e1', 'e2', 'e3')
THEN element
WHEN date > '2012' AND date <= '2013' AND element NOT IN ('e2', 'e3') --exclude 2 elements
THEN element
WHEN date > '2011' AND date <= '2012' AND element NOT IN ('e3') --exclude 1 element
THEN element
WHEN date <= '2011'
THEN element -- no elements excluded
ELSE
NULL
END
FROM elementTable
【讨论】:
值得注意的是,在这个解决方案中,您仍然会得到排除元素的 NULL。 真的。他/她将不得不为他/她想要做的事情定义其他部分。伪代码没有提及其他任何内容,因此我为其设置了 NULL。【参考方案2】:您正在尝试在 CASE
的 THEN
部分添加表达式,而需要声明。
而不是使用CASE
尝试将条件移动到WHERE
部分:
SELECT element
FROM elementTable
WHERE (date > '2013' AND element NOT IN ('e1', 'e2', 'e3'))
OR (date > '2012' AND date <= '2013' AND element NOT IN ('e2', 'e3'))
OR (date > '2011' AND date <= '2012' AND element NOT IN ('e3'))
OR date <= '2011'
【讨论】:
以上是关于case语句上的sql in()函数的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server CASE .. WHEN .. IN 语句
SQL 中 where 条件中 in 后面 加 CASE WHEN 语句 报错
SQL 中 where 条件中 in 后面 加 CASE WHEN 语句 报错