2014-07-03 56 views
1

我有以下查詢來生成一個報告,使用之間檢查日期是否在一個範圍內。使用之間case語句不工作

由於某種原因,這是行不通的,即使當我輸出數據,我知道它是正確的。

任何想法爲什麼它不工作?

這裏是我的SQL

SELECT @ReportDate 
SELECT DATEADD(dd, -1, @ReportDate), DATEADD(dd, -30, @ReportDate) 

SELECT i.Total, i.DateDue, c.Email, 
    CASE 
    WHEN i.DateDue BETWEEN DATEADD(dd, -1, @ReportDate) AND DATEADD(dd, -30, @ReportDate) THEN '1 - 30' 
    WHEN i.DateDue BETWEEN DATEADD(dd, -31, @ReportDate) AND DATEADD(dd, -60, @ReportDate) THEN '31 - 60' 
    WHEN i.DateDue BETWEEN DATEADD(dd, -61, @ReportDate) AND DATEADD(dd, -90, @ReportDate) THEN '61 - 90' 
    WHEN i.DateDue BETWEEN DATEADD(dd, -91, @ReportDate) AND DATEADD(dd, -120, @ReportDate) THEN '91 - 120' 
    ELSE '> 120' END 
    AS [Group] 
FROM Data i 

而且數據結果:

ReportDate 
2014-07-03 11:46:02.467 

First Range 
Start     End 
2014-07-02 11:46:02.467 2014-06-03 11:46:02.467 

Total DateDue     Email     Range 
121535 2014-06-17 08:50:05.440 [email protected] > 120 
833208 2014-06-26 08:50:19.613 [email protected] > 120 
381400 2014-06-18 08:50:20.177 [email protected] > 120 
+0

創建一個複製問題的小提琴。 –

回答

3

你的範圍倒 - 對BETWEEN左邊的日期始終右邊的日期之後。切換雙方以使查詢按預期工作:

SELECT i.Total, i.DateDue, c.Email, 
    CASE 
    WHEN i.DateDue BETWEEN DATEADD(dd, -30, @ReportDate) AND DATEADD(dd, -1, @ReportDate) THEN '1 - 30' 
    WHEN i.DateDue BETWEEN DATEADD(dd, -60, @ReportDate) AND DATEADD(dd, -31, @ReportDate) THEN '31 - 60' 
    WHEN i.DateDue BETWEEN DATEADD(dd, -90, @ReportDate) AND DATEADD(dd, -61, @ReportDate) THEN '61 - 90' 
    WHEN i.DateDue BETWEEN DATEADD(dd, -120, @ReportDate) AND DATEADD(dd, -91, @ReportDate) THEN '91 - 120' 
    ELSE '> 120' END 
    AS [Group] 
FROM Data i 
+0

什麼白癡。謝謝 – shenku