SQL Switch / Case /之间的where子句

时间:2011-11-02 13:12:32

标签: sql-server

我试着四处寻找但找不到任何可以帮助我的东西。

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
)

我收到错误,例如'关键字'AND''附近的语法不正确 我需要根据案件陈述找到日期之间的日期

如果可能的话?

2 个答案:

答案 0 :(得分:1)

不幸的是,来自Oracle的错误消息(您没有说明您正在使用哪个数据库服务器)可能会令人不知道错误的位置。

问题在于:

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

你不希望AND在那里。这是语法错误。

答案 1 :(得分:1)

您的WHERE条款存在问题。您不能一次性在BETWEEN中指定CASE运算符的两个边界。可能你的意思是:

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