Я дергаю себя за такую простую вещь ...
Я записываю количество дней, когда член посещает спортзал.По умолчанию я предполагаю, что участник посещает каждый день.Когда они болеют, я записываю даты и общее количество дней, отсутствующих в таблице (то есть DateFrom
, DateEnd
, TotalDays
).Общее количество отсутствующих дней - это разница между DateFrom
и DateEnd
.
Теперь иногда я не знаю, когда участник возвращается в спортзал.Просто они перестали посещать в определенный день.Следовательно, DateEnd
и TotalDays
неизвестны.Таким образом, общее количество дней рассчитывается с учетом разницы между DateFrom
и сегодняшней датой.
Table: InactiveOnProgram
Columns: PersonId, DateFrom, DateEnd, TotalDays
Данные:
1,01/01/2012,05/01/2012,5
1,05/01/2012,08/01/2012,3
2,01/02/2012,05/02/2012,5
2,05/02/2012,08/02/2012,3
2,20/02/2012,null,null
Мой запрос ниже работает нормальнодля personId = 2.Общее количество отсутствующих дней составляет 8 + 2 = 10 дней (2 дня с 20.02.2012 по 22.02.2012 = сегодня).Но для personId = 1 он возвращает ноль вместо 8 дней!
sql:
(SELECT
case ( isnull(sum(TotalDays), 0) )
when 0 then 0
else CAST(SUM(TotalDays) as DECIMAL(20,2))
end
FROM InactiveOnProgram
)
+
(SELECT
case ( isnull( DateFrom, 0) )
when null then 0
when 0 then 0
else CAST(datediff(day,DateFrom, getdate()) as DECIMAL(20,2))
end
FROM InactiveOnProgram
WHERE (TotalDays is null or TotalDays =0)
AND DateTo is null
)
Есть идеи, что мне здесь не хватает ?!Насколько я могу догадаться, вторая часть sql возвращает ноль и поэтому игнорирует первую часть!
Любая помощь очень ценится.
Спасибо