2013-06-03 76 views
1

下面的代码不适用于我,如果可能,我想帮忙解决。sql语句中的()函数

我想根据日期排除某些元素,但我没有运气。

到目前为止我的代码看起来有点像这样:

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 IN声明。

欢迎提供任何提示,提示或帮助。

在此先感谢。

+0

哪些SQL您使用的? MSSQL或mysql – AJP

回答

0

试试这个。

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 
+0

值得注意的是,在此解决方案中,您仍然可以为排除的元素获取NULL。 – Chorel

+0

是真的。他/她将不得不为其他部分定义他/她想要做的事情。伪代码没有提到其他的东西,所以我把它放在NULL。 – AJP

0

您试图同时声明预计将在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'