【问题标题】:sql in() function on case statementcase语句上的sql in()函数
【发布时间】: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

标签: sql function case notin


【解决方案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】:

您正在尝试在 CASETHEN 部分添加表达式,而需要声明。 而不是使用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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 2011-08-27
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2013-10-03
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多