我正在尝试在where子句中为我正在处理的查询编写一个case语句。我正在将代码导入Crystal报表中,我基本上是想说变量'type'是否设置为'create'在where子句中在该日期范围内运行,否则在其他日期范围内运行。它一直给我一个错误。我似乎无法在此处确定我的语法出了什么问题。帮助任何人吗?

DECLARE @Date1 DATETIME
DECLARE @Date2 DATETIME
DECLARE @type VARCHAR(20)
SET @Date1 = '2010-1-1'
SET @Date2 = '2010-2-1'
SET @type = '{?DateType}'

select *
from filled
WHERE
    (CASE WHEN @type = 'create' THEN
    filled.CREATEDON >= @Date1
    AND filled.CREATEDON < DATEADD(d, +1, @Date2)
    WHEN @type <> 'create' THEN
    filled.datefilled >= @Date1
     AND filled.datefilled < DATEADD(d, +1, @Date2)
     END)

最佳答案

您不需要case语句

WHERE ( (@type = 'create' and filled.CREATEDON >= @Date1 AND filled.CREATEDON < DATEADD(d, +1, @Date2) ) or
        (@type <> 'create' and filled.datefilled >= @Date1 AND filled.datefilled < DATEADD(d, +1, @Date2) )
      )

这将使您在case语句中具有荒谬的逻辑。这两个条件的@type值相同。我认为这是一个错字。

10-04 21:07