/ / Używanie w instrukcji case nie działa - sql, sql-server

Używanie w instrukcji case nie działa - sql, sql-server

Mam następujące zapytanie do wygenerowania raportu, używając między, aby sprawdzić, czy data jest w zakresie.

Z jakiegoś powodu to nie działa, mimo że kiedy wyprowadzam dane wiem, że to jest poprawne.

Wszelkie pomysły, dlaczego nie działa?

Oto mój kod 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

Wyniki danych:

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 customer3@example.com   > 120
833208  2014-06-26 08:50:19.613 customer3@example.com   > 120
381400  2014-06-18 08:50:20.177 exmployee1@example.com  > 120

Odpowiedzi:

3 dla odpowiedzi № 1

Twoje zakresy są odwrócone - data po lewej stronie BETWEEN jest zawsze po data po prawej stronie. Zmień strony, aby zapytanie działało zgodnie z oczekiwaniami:

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