/ / Usando entre uma instrução case não funcionando - sql, sql-server

Usando entre em uma instrução de caso não funciona - sql, sql-server

Eu tenho a seguinte consulta para gerar um relatório, usando entre para verificar se uma data está em um intervalo.

Por alguma razão, isso não está funcionando, embora quando eu os dados saibam que está correto.

Alguma idéia porque não está funcionando?

Aqui está meu 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

E os resultados dos dados:

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

Respostas:

3 para resposta № 1

Seus intervalos são invertidos - a data à esquerda de BETWEEN é sempre depois de a data à direita. Alterne os lados para que sua consulta funcione conforme o esperado:

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