2011-10-28 161 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:請你用的解決方案更新您的問題 - 在這裏評論,它的**真的很難**閱讀..... –