2013-06-03 116 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'