Почему этот запрос tsql не выбирает то, что он намеревался? - PullRequest
1 голос
/ 24 июля 2011
declare @customerID int
set @customerID=1


;with cteDates as
(
  select dateadd(hh, datediff(hh, 0, getdate()), 0) as [Date]
  union all
  select dateadd(hh, -1, [Date]) as [Date]
  from cteDates
  where [Date] > dateadd(hh, -23, getdate())
)
select
    sum(coalesce(field1,0)) field1,
    sum(coalesce(field2,0)) field2,
    sum(coalesce(field3,0)) field3,
    sum(coalesce(field4,0)) field4,
    sum(coalesce(field5,0)) field5,
    d.[Date]
from cteDates as d left join [Statistics] s
on d.Date=s.date
where s.customerID=@customerID and s.date>dateadd(hh,-24,getdate())
group by d.Date

Я хочу получить почасовую статистику для определенного клиента, если нет значения, которое я все равно хочу выбрать 0 ...

Этот запрос выбирает только те строки, которые существуют в таблице статистики, даже если я оставил соединение с календарем CTE ...

спасибо, ...

1 Ответ

1 голос
/ 24 июля 2011

Это потому, что вы используете статистическую таблицу в предложении where.

Попробуйте:

declare @customerID int
set @customerID=1

;with cteDates as
(
select dateadd(hh, datediff(hh, 0, getdate()), 0) as [Date]
union all
select dateadd(hh, -1, [Date]) as [Date]
from cteDates
where [Date] > dateadd(hh, -23, getdate())
)
select
sum(coalesce(field1,0)) field1,
sum(coalesce(field2,0)) field2,
sum(coalesce(field3,0)) field3,
sum(coalesce(field4,0)) field4,
sum(coalesce(field5,0)) field5,
d.[Date]
from cteDates as d left join [Statistics] s
on d.Date=s.date
and s.customerID=@customerID and s.date>dateadd(hh,-24,getdate())
group by d.Date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...