SELECT deptCode, deptName,ISNULL(timeOutNum,0)timeOutNum,ISNULL(isOutNum,0)isOutNum,ISNULL(inTime,0) inTime,ISNULL(timeOutRate,'0') timeOutRate,ISNULL(inTimeRate,'0') inTimeRate FROM (select DISTINCT c.dept_name as deptCode,t8.Name as deptName,t1.isOutNum ,n1.timeOutNum,
CONVERT(decimal(8,2),n1.timeOutNum*1./t1.isOutNum) as timeOutRate,(t1.isOutNum-n1.timeOutNum) as inTime,CONVERT(decimal(8,2),(t1.isOutNum-n1.timeOutNum)*1./t1.isOutNum) as inTimeRate
from archive_master as c
]]>
left join (select dept_name,COUNT(*) AS inNum from archive_master as s where s.ArchiveState in('在院')
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t on c.dept_name= t.dept_name
left join (select dept_name,COUNT(*) AS isOutNum from archive_master as s where s.ArchiveState!='在院'
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<!--<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
ISNULL((a.day2-a.death2Num)/NULLIF((a.fileNum-a.deathNum), 0) ,'0') as day2Rate,
ISNULL((a.day3-a.death3Num)/NULLIF((a.fileNum-a.deathNum), 0) ,'0') as day3Rate,
ISNULL((a.day7)/NULLIF((a.fileNum), 0) ,'0') as day7Rate,
ISNULL(b.timeOutNum, '0') timeOutNum,
ISNULL(
case when right(CAST(fileNum AS FLOAT)/ NULLIF (isOutNum, 0) * 100,2)='00'
then CONVERT(VARCHAR,fileNum / NULLIF (isOutNum, 0) * 100)
else CONVERT(VARCHAR,ROUND(CAST(fileNum AS FLOAT)/ NULLIF (isOutNum, 0) * 100,2)) end
,'0') fileRate,
ISNULL(
case when ISNULL(timeOutNum, '0')='0'
then '0'
when right(CAST(timeOutNum AS FLOAT)/ NULLIF (isOutNum, 0) * 100,2)='00'
then CONVERT(VARCHAR,timeOutNum / NULLIF (isOutNum, 0) * 100)
else CONVERT(VARCHAR,ROUND(CAST(timeOutNum AS FLOAT)/ NULLIF (isOutNum, 0) * 100,2)+'') end
,'0') timeOutRate,
ISNULL((isOutNum - timeOutNum), '0') AS inTime,
ISNULL(
case when ISNULL(timeOutNum, '0')='0'
then '100'
when right(CAST((isOutNum - timeOutNum) AS FLOAT)/ NULLIF (isOutNum, 0) * 100,2)='00'
then CONVERT(VARCHAR,(isOutNum - timeOutNum) / NULLIF (isOutNum, 0) * 100)
else CONVERT(VARCHAR,ROUND(CAST((isOutNum - timeOutNum) AS FLOAT)/ NULLIF (isOutNum, 0) * 100,2)) end
,'0') inTimeRate
FROM(
select dept_name,SUM(CASE WHEN ArchiveState IN ('在院') AND Is_Valid != 1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
@ -90,39 +82,12 @@
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t1 on c.dept_name= t1.dept_name
left join (
SELECT a.dept_name,ISNULL(timeOutNum, 0) timeOutNum FROM archive_master AS a LEFT JOIN (
select s.dept_name as dept_name,COUNT(*) AS timeOutNum from archive_master as s
LEFT JOIN(select master_id archive_detail_id,handle_time create_time,handle_name first_instance from (
select ROW_NUMBER() over(partition by master_id order by handle_time asc) RowNum
,Archive_Master_Following.*
from Archive_Master_Following where 1=1 and following_type ='5' ) as t1 where 1=1 and RowNum = 1
) d
on s.id=d.archive_detail_id
where s.ArchiveState!='在院'
<iftest="overdueDays != null and overdueDays != ''">
and convert(int,[dbo].[getWorkday](s.discharge_date_time,d.create_time))-convert(int,#{overdueDays,jdbcType=INTEGER})>0
</if>
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7) group by dept_name
) x ON a.dept_name = x.dept_name
<!--<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>-->
AND NOT ( datepart( weekday, discharge_date_time) = 1
OR datepart( weekday, discharge_date_time) = 7 ) THEN 1 ELSE 0 END) as inNum,
SUM(CASE WHEN ArchiveState NOT IN ('在院','作废') AND Is_Valid != 1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
@ -131,26 +96,11 @@
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
) as n1 on c.dept_name= n1.dept_name
left join (select dept_name,COUNT(*) AS fileNum from archive_master as s where s.ArchiveState in('已归档','已认证')
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<!-- <choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>-->
AND NOT (datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time) = 7) THEN 1 ELSE 0 END) as isOutNum,
SUM(CASE WHEN ArchiveState IN ('已归档', '已认证') AND Is_Valid != 1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
@ -159,25 +109,11 @@
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t2 on c.dept_name= t2.dept_name
left join (select dept_name,COUNT(*) AS unfileNum from archive_master as s where s.ArchiveState not in('已归档','已认证')
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<!-- <choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>-->
AND NOT (datepart( weekday, discharge_date_time) = 1 OR datepart( weekday, discharge_date_time) = 7) THEN 1 ELSE 0 END) as fileNum,
SUM(CASE WHEN ArchiveState NOT IN ('已归档', '已认证','作废') AND Is_Valid != 1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
@ -186,25 +122,14 @@
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t3 on c.dept_name= t3.dept_name
left join (select dept_name,COUNT(*) AS deathNum from archive_master as s where s.DISCHARGE_DISPOSITION=5
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<!--<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>-->
AND NOT ( datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time ) = 7 ) THEN 1 ELSE 0 END) as unfileNum,
SUM(CASE WHEN DISCHARGE_DISPOSITION = 5 AND NOT ( datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time ) = 7 ) THEN 1 ELSE 0 END) as deathNum,
SUM(CASE WHEN DISCHARGE_DISPOSITION = 5 AND datediff( d,discharge_date_time,getdate()) <= 2 AND NOT ( datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time ) = 7 ) THEN 1 ELSE 0 END) as death2Num,
SUM(CASE WHEN DISCHARGE_DISPOSITION = 5 AND datediff( d,discharge_date_time,getdate()) <= 3 AND NOT ( datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time ) = 7 ) THEN 1 ELSE 0 END) as death3Num,
SUM(CASE WHEN ArchiveState IN ('已归档', '已认证') AND Is_Valid != 1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
@ -213,25 +138,12 @@
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t4 on c.dept_name= t4.dept_name
left join (select dept_name,COUNT(*) AS Num from archive_master as s where s.ArchiveState in('已归档','已认证') and datediff(d,discharge_date_time,getdate())<=2
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<!--<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>-->
AND datediff( d, discharge_date_time,getdate() ) <= 2
AND NOT ( datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time ) = 7 ) THEN 1 ELSE 0 END) as day2,
SUM(CASE WHEN ArchiveState IN ('已归档', '已认证') AND Is_Valid != 1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
@ -240,25 +152,12 @@
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t5 on c.dept_name= t5.dept_name
left join (select dept_name,COUNT(*) AS Num from archive_master as s where s.ArchiveState in('已归档','已认证') and datediff(d,discharge_date_time,getdate())<=3
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<!--<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>-->
AND datediff(d,discharge_date_time, getdate()) <= 3
AND NOT ( datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time) = 7 ) THEN 1 ELSE 0 END) as day3,
SUM(CASE WHEN ArchiveState IN ('已归档', '已认证') AND Is_Valid != 1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
@ -267,56 +166,77 @@
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t6 on c.dept_name= t6.dept_name
left join (select dept_name,COUNT(*) AS Num from archive_master as s where s.ArchiveState in('已归档','已认证') and datediff(d,discharge_date_time,getdate())<=7
and not (datepart(weekday,discharge_date_time)=1 or datepart(weekday,discharge_date_time)=7)
<!--<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and discharge_date_time between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
<whentest="startDate != null and startDate != ''">
and discharge_date_time >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and discharge_date_time <= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>-->
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and
#{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
group by dept_name) as t7 on c.dept_name= t7.dept_name
left join (SELECT code,Name FROM emr_dictionary ) as t8 on c.dept_name=t8.code
) v_count where 1=1
<!--<if test="deptCode != null and deptCode!=''">-->
AND datediff( d,discharge_date_time, getdate() ) <= 7
AND NOT ( datepart( weekday, discharge_date_time ) = 1 OR datepart( weekday, discharge_date_time ) = 7 ) THEN 1 ELSE 0 END) as day7
from Archive_Master
<where>
1=1
<choose>
<whentest="startDate != null and startDate != '' and endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) between CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120) and #{endDate,jdbcType=NCHAR}
</when>
<whentest="startDate != null and startDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) >= CONVERT(VARCHAR(10),#{startDate,jdbcType=NCHAR},120)
</when>
<whentest="endDate != null and endDate != ''">
and CONVERT(VARCHAR(10),discharge_date_time,120) <= #{endDate,jdbcType=NCHAR}
</when>
</choose>
</where>
GROUP BY dept_name
) as a
LEFT JOIN(
select m.dept_name,
<iftest="overdueDays != null and overdueDays != ''">
SUM(CASE WHEN ISNULL(dbo.f_WorkDay(DATEADD(DAY,1,substring(m.discharge_date_time,1,10)),f.handle_time) , 0)-#{overdueDays,jdbcType=NCHAR}>0 THEN 1 ELSE 0 END) timeOutNum
</if>
<iftest="overdueDays == null or overdueDays == ''">
SUM(CASE WHEN ISNULL(dbo.f_WorkDay(DATEADD(DAY,1,substring(m.discharge_date_time,1,10)),f.handle_time) , 0)-3>0 THEN 1 ELSE 0 END) timeOutNum
</if>
from (
select id,master_id ,convert(varchar,handle_time,120) handle_time ,handle_id,handle_name,following_type from (
select ROW_NUMBER() over(partition by master_id order by handle_time asc) RowNum
,Archive_Master_Following.*
from Archive_Master_Following where 1=1 and following_type='5'
) as t1 where 1=1 and RowNum = 1
) f
right JOIN (
select id master_id,patient_id,inp_no,visit_id,name,dept_name,convert(varchar,discharge_date_time,120) discharge_date_time,check_doctor,first_instance,DOCTOR_IN_CHARGE,