2011-10-28 77 views
2

条款我试着写代码,我只想看到当前财年的请求case语句。我们的财年开始7月1日,结束6月30日的SQL Server 2008 R2:在当前财年

但是,当我写了下面的代码

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号线
附近有语法错误 '>'。

我该如何解决这个问题的代码只从当前财年的研究项目

回答

2

你的第一种情况是有点搞笑:

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关键字后,你应该只是一个简单的表达式返回一个值 - 不是两行的代码.....

+0

我计算出来:WHERE( \t \t(日期部分(YY,DATEADD(第二,open_date, '19700101'))=日期部分(YY,GETDATE())AND日期部分(毫米, DATEADD(第二,open_date, '19700101'))> 6和日期分量(毫米,GETDATE())> 6) 或 \t \t(datepart(yy,dateadd(second,open_date,'19700101'))= datepart(yy,GetDate())AND datepart(mm,dateadd(second,open_date,'19700101'))<= 6与日期部分(毫米,GETDATE())<= 6) \t \t OR \t \t(日期部分(YY,DATEADD(第二,open_date, '19700101'))=日期部分(YY,GETDATE() - 1)和日期分量(毫米,DATEADD(第二,open_date, '19700101'))> 6和日期部分(毫米,GETDATE())<= 6) \t) – jsmith

+0

@jsmith:请你用的解决方案更新您的问题 - 在这里评论,它的**真的很难**阅读..... –