sql server 2008 r2:当前会计年度 where 子句中的 case 语句

Posted

技术标签:

【中文标题】sql server 2008 r2:当前会计年度 where 子句中的 case 语句【英文标题】:sql server 2008 r2: case statement in where clause for current fiscal year 【发布时间】:2011-10-28 18:26:39 【问题描述】:

我正在尝试编写代码,我只想查看当前财政年度的请求。我们的财政年度从 7 月 1 日开始,到 6 月 30 日结束

但是当我写下面的代码时

SELECT
    group_name
    ,SUM(CASE WHEN status = 'HOLD'THEN 1 ELSE 0 END) AS HOLD    
    ,SUM(CASE WHEN status = 'CL'THEN 1 ELSE 0 END) AS CL
    ,SUM(CASE WHEN status = 'OP'THEN 1 ELSE 0 END) AS OP
FROM dbo.View_Request 
WHERE CASE WHEN datepart(mm, GetDate()) > 6 THEN /*It is past June in this year*/
            datepart(mm,dateadd(second,open_date,'19700101')) >= 7
            AND datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())
        ELSE /*It is June 30th or earlier in the year*/
            CASE WHEN datepart(mm,dateadd(second,open_date,'19700101')) <= 6 THEN
                datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())
            ELSE
                datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())-1
            END
        END
GROUP BY group_name

我收到模糊的错误消息:

消息 102,第 15 级,状态 1,第 8 行 '>' 附近的语法不正确。

如何修复此代码以仅检查当前会计年度的条目

【问题讨论】:

【参考方案1】:

你的第一个案例有点搞笑:

CASE WHEN datepart(mm, GetDate()) > 6 THEN /*It is past June in this year*/
        datepart(mm,dateadd(second,open_date,'19700101')) >= 7  
        AND datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())

看到第二行和第三行了吗?这些是什么??

您的 CASE 语句应始终为:

CASE WHEN (condition) THEN (return value)
     WHEN (condition 2) THEN (return value 2)
     ...
     ELSE (return value x)
END

这两行真的不适合在那里 - 在WHEN 关键字之后,您应该只有一个返回单个值的简单表达式 - 而不是两行代码.....

【讨论】:

我想通了: WHERE ((datepart(yy, dateadd(second,open_date,'19700101')) = datepart(yy, GetDate()) AND datepart(mm, dateadd(second,open_date ,'19700101')) > 6 AND datepart(mm, GetDate()) > 6) OR (datepart(yy, dateadd(second,open_date,'19700101')) = datepart(yy, GetDate()) AND datepart(mm , dateadd(second,open_date,'19700101')) 6 AND datepart(mm, GetDate()) @jsmith:您能否用解决方案更新您的问题 - 在 cmets 中,真的很难阅读.....

以上是关于sql server 2008 r2:当前会计年度 where 子句中的 case 语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 2008 r2附加数据库出现错误了,见下图,怎么解决?求帮助!!!!!

MS SQL Server 2008 R2 常规操作

win12安装 sqlserver2008 r2未授权的操作

SQL Server 2008 R2:将过去的日期更新为“下一个”日期

自动将 CSV 导入 SQL Server 2008 R2

在Windows Server 2008 R2 Server中,连接其他服务器的数据库遇到“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通