2011-12-28 2 views
0

Я нашел следующее в Stackoverflow и работал с ним, чтобы найти количество дней пациента каждый месяц. Он работает очень хорошо, если у меня есть даты приема и выписки.Расчет количества дней между датой приема и сегодня

Не могу понять, как отредактировать его, чтобы рассчитать дни пациента, когда дата истечения не была завершена ... пациент все еще находится в больнице. Если мне кажется, что я должен использовать Coalesce или ISNULL, чтобы найти записи, в которых дата сброса NULL, но я не программист и буду благодарен за вашу помощь.

WITH Mos AS (
    SELECT 
    D.ED_ADMIT_DATE, 
    D.ED_DISCHARGE_DATE, 
    Number, 

    DateAdd(Month, Number, D.ED_ADMIT_DATE - Day(D.ED_ADMIT_DATE) + 1) MoDate 
FROM 
    cases_cstm D 
    INNER JOIN master.dbo.spt_values V ON V.Number <= DateDiff(Month, D.ED_ADMIT_DATE, D.ED_DISCHARGE_DATE) 
WHERE 
    V.Type = 'P'), Dys AS (
SELECT 
    MoDate, 
    DateDiff(
    Day, 
    CASE WHEN Number = 0 THEN ED_ADMIT_DATE ELSE MoDate END, 
    CASE WHEN Number = DateDiff(Month, ED_ADMIT_DATE, ED_DISCHARGE_DATE) THEN ED_DISCHARGE_DATE ELSE DateAdd(Month, 1, MoDate) -1 
END 
) + 1 Cnt 
FROM Mos) 
SELECT Year(MoDate) Yr, 
Coalesce(DateName(Month, MoDate), 'Total') Mo, 
Convert(varchar(11), Sum(Cnt)) + ' day' + CASE WHEN Sum(Cnt) = 1 THEN '' ELSE 's' END Descr 

FROM Dys 
GROUP BY MoDate 
WITH ROLLUP 
ORDER BY 
Grouping(MoDate), 
MoDate; 

ответ

3

Вы можете заменить каждую из ED_DISCHARGE_DATE вхождение с:

IsNull(ED_DISCHARGE_DATE,getdate()) 

Это использует текущее время всякий раз, когда дата выписки недоступна.

+0

Спасибо Adnomar, я ценю это. – Stan