2016-05-20 3 views
0

У меня есть таблица госпитализаций и вы должны подсчитывать прием пациентов по типу записи для типов взрослых.TSQL Как объединить промежуточные итоги, итоговые суммы и промежуточные итоги по N-1 в одном запросе

Тип записи - 1 или 2, где 1 - прямой вход, а 2 - перенос.

Это пример данных (Ward и WardType соединяются из таблицы поиска): -

IntRefID RecordType StartDate StartTime Ward WardType 
1205378364 1   25/04/2016 17:30:00 BR WARD Adult 
1205378965 2   26/04/2016 18:00:00 BL WARD  HDU 
1205402541 1   21/04/2016 01:15:00 SA UNIT  SA 
1205402541 2   26/04/2016 14:36:00 BR WARD Adult 
1205402772 1   21/04/2016 03:11:00 SA UNIT  SA 

Выход мне нужно будет выглядеть следующим образом -

Ward RecordType-1 RecordType-2 Total Transfers from SA 
BR WARD   1   1    2   1 
BL WARD   0   1    1   0 

Когда есть была передача между операндами IntRefID остается неизменной.

Я застреваю, пытаясь получить итоговые значения для «Переходов из SA».

В третьем и четвертом строках данных показан экземпляр, в котором пациент был принят в подразделение SA, а затем переведен в BR Ward. Мне нужно пересчитать эту передачу.

Существует несколько типов подопечных, и мне нужно только пересчитывать переводы из подразделения SA в взрослые палаты.

Я просмотрел другие сообщения, в которых вы можете подсчитать N-мерное значение группы или в этом случае N-1, но я не могу решить, как объединить это с регулярными промежуточными итогами в одном запросе.

+0

Спасибо за ответы. Я использовал немного, чтобы придумать решение, которое использовало временную таблицу для хранения номеров строк, разделенных по IntRefId, упорядоченным по дате начала. Затем выполнил запрос self join на IntRefId и [Row Number] = [Row Number] -1 – JohnnyPgood

ответ

0

Может быть что-то вроде этого:

select 
    Ward, 
    SUM(Case recordType when 1 then 1 end) RecordType-1 
    SUM(Case recordType when 2 then 1 end) RecordType-2 
    COUNT(*) Total, 
    case when RecordType = 2 then l.c end [Transfers from SA] 
from myTable t 
outer apply (
    select 
     COUNT(*) c 
    from myTable l 
    where 
     l.RecordType = t.RecordType-1 and 
     Ward = 'SA UNIT' and 
     t.startDate+t.StartTime > l.startDate+t.starttime 
)l 
where 
t.Ward in ('BR WARD','BL WARD') 
group by 
    t.ward 
1

Попробуйте ниже запрос: -

select distinct Ward, 
(select count(RecordType) from test5 B where B.Ward=A.Ward AND B.RecordType=1) AS [RecordType-1], 
(select count(RecordType) from test5 B where B.Ward=A.Ward AND B.RecordType=2) AS [RecordType-2], 
Count(RecordType) over (partition by Ward) AS Total, 
(select count(*) from test5 B where B.Ward=A.Ward AND B.RecordType=A.RecordType AND B.WardType='Adult') AS [Transfers from SA] 
from test5 A 

Этот запрос даст вам выход, как показано ниже: -

Ward  RecordType-1 RecordType-2 Total Transfers from SA 
BL WARD  0    1    1   0 
BR WARD  1    1    2   1 
SA UNIT  2    0    2   0 
Смежные вопросы