【问题标题】:sql server 2008 r2: case statement in where clause for current fiscal yearsql server 2008 r2:当前会计年度 where 子句中的 case 语句
【发布时间】: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 行
'>' 附近的语法不正确。

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

【问题讨论】:

    标签: sql sql-server date case


    【解决方案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 中,真的很难阅读.....
    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多