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附加数据库出现错误了,见下图,怎么解决?求帮助!!!!!
win12安装 sqlserver2008 r2未授权的操作
SQL Server 2008 R2:将过去的日期更新为“下一个”日期
在Windows Server 2008 R2 Server中,连接其他服务器的数据库遇到“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通