2011-11-02 45 views
-2

我試着四處搜索,但找不到任何幫助我的東西。SQL開關/案例/之間在哪裏條款

SELECT COL1,* FROM TAB1 A 
JOIN TAB2 b ON A.ID=B. ID 
INNER JOIN TAB3 C ON C.AsOf=A.AsOf 
WHERE 
B.AsOf BETWEEN 
(
    CASE WHEN C.DayOfWeek = 7 AND C.IsCalendarMonthEnd = 'Y' 
      THEN DATEADD(dd,-1,C.PreviousCalendarDay) AND DATEADD(dd,+1,C.AsOf) 
    END 
) 

我得到像「關鍵字附近語法不正確「的錯誤以及」 我需要找到

如果可能的話basid案例statment日期之間的日期?

+0

我建議在編寫代碼之前至少掌握基本的語法。 –

+0

更新查詢:SELECT COL1,* FROM TAB1 A JOIN TAB2 b ON A.ID = B。 ID INNER JOIN TAB3 C ON C.AsOf = A.AsOf WHERE B.AsOf BETWEEN(CASE when C.DayOfWeek = 7 AND C.IsCalendarMonthEnd ='Y'THEN DATEADD(dd,-1,C.PreviousCalendarDay)AND DATEADD(dd ,+ 1,C.AsOf)END) –

回答

1

不幸的是,特別是來自Oracle的錯誤消息(你不會說你正在使用哪個數據庫服務器)可能會令人瘋狂地不清楚錯誤發生在何處。

的問題是在這裏:

JOIN TAB2 b ON A.ID=B. ID AND 
INNER JOIN TAB3 C ON C.AsOf=A.AsOf 

你不想AND那裏。這是一個語法錯誤。

+0

AND'AND'在'CASE'中也是錯誤的('THEN DATEADD(dd,-1,C.PreviousCalendarDay)AND DATEADD(dd,+ 1,C.AsOf) ') –

+0

我正在使用SQL serevr 2005.sorry我錯過了類似我這樣實際qureyy這樣。SELECT COL1,*從TAB1 A JOIN TAB2 B ON A.ID = B。 ID INNER JOIN TAB3 C ON C.AsOf = A.AsOf WHERE B.AsOf BETWEEN(CASE when C.DayOfWeek = 7 AND C.IsCalendarMonthEnd ='Y'THEN DATEADD(dd,-1,C.PreviousCalendarDay)AND DATEADD(dd ,+ 1,C.AsOf)END) –

+1

請修改您的問題,然後顯示您的實際查詢。 –

1

您的WHERE條款存在問題。您不能一次指定CASE中的BETWEEN運算符的邊界。可能你的意思是這樣的:

… 
WHERE C.DayOfWeek = 7 
    AND C.IsCalendarMonthEnd = 'Y' 
    AND B.AsOf BETWEEN DATEADD(dd,-1,C.PreviousCalendarDay) AND DATEADD(dd,+1,C.AsOf) 
+0

但我在我的實際query.in中有更多的case語句,在這種情況下是否有效? –

+0

@BhaskaravarmaDandu:你能舉個例子嗎? –

+0

SELECT A. * FROM TAB1甲 JOIN TAB2乙ON A.ID = B.ID INNER JOIN TAB3 C ON C.AsOf = A.AsOf WHERE B.AsOf BETWEEN ( \t CASE WHEN c.DayOfWeek = 7日當天(dd,-1,c.PreviousCalendarDay)和DATEADD(dd,+ 1,c.AsOf) \t CASE當c.DayOfWeek = 1 THEN DATEADD(dd,-1,c.PreviousCalendarDay)AND DATEADD(dd ,+ 1,c.AsOf) \t CASE WHEN c.DayOfWeek = 2 THEN DATEADD(DD,-1,c.PreviousCalendarDay)AND DATEADD(DD,+ 1,c.AsOf) \t END ) –