patientStatistics.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.lemon.lifecenter.mapper.PatientMapper">
  4. <select id="selectStatisticsPatientCount" parameterType="PatientDTO" resultType="int">
  5. <![CDATA[
  6. SELECT COUNT(*)
  7. FROM DB_ROOT
  8. CONNECT BY LEVEL <= ( TO_DATE( #{endDate} ) - TO_DATE( #{startDate} ) + 1)
  9. ]]>
  10. </select>
  11. <select id="selectStatisticsPatientList" parameterType="PatientDTO" resultType="PatientDTO">
  12. <![CDATA[
  13. SELECT inDate,
  14. NVL( hTotal, 0 ) hTotal,
  15. NVL( dTotal, 0 ) dTotal,
  16. NVL( tTotal, 0 ) tTotal,
  17. NVL( eTotal, 0 ) eTotal
  18. FROM ( SELECT TO_CHAR(TO_DATE( #{startDate} ) + LEVEL - 1, 'YYYY-MM-DD') AS inDate
  19. FROM DB_ROOT
  20. CONNECT BY LEVEL <= ( TO_DATE( #{endDate} ) - TO_DATE( #{startDate} ) + 1)
  21. ORDER BY inDate DESC
  22. LIMIT #{limit}, #{limitMax}
  23. ) DL
  24. LEFT JOIN ( SELECT DATE_FORMAT( disisolation_date ,'%Y-%m-%d' ) AS dDate,
  25. COUNT( CASE WHEN state='D' THEN 1 END ) dTotal,
  26. COUNT( CASE WHEN state='T' THEN 1 END ) tTotal,
  27. COUNT( CASE WHEN state='E' THEN 1 END ) eTotal
  28. FROM patient_care
  29. WHERE center_code != 1
  30. AND USE_YN = 'Y'
  31. AND center_code IN ( SELECT center_code AS center_code
  32. FROM center_info
  33. WHERE 1 = 1
  34. ]]>
  35. <if test='q != null and q != ""'>
  36. <![CDATA[
  37. AND center_name LIKE CONCAT('%', #{q}, '%')
  38. ]]>
  39. </if>
  40. <if test='locationCode != null and locationCode != ""'>
  41. <![CDATA[
  42. AND jurisdiction = #{locationCode}
  43. ]]>
  44. </if>
  45. <![CDATA[
  46. )
  47. GROUP BY DATE_FORMAT( disisolation_date ,'%Y-%m-%d' )
  48. ) A
  49. ON DL.inDate = A.dDate
  50. LEFT JOIN ( SELECT DATE_FORMAT( hospitalization_date ,'%Y-%m-%d' ) AS hDate,
  51. COUNT(*) hTotal
  52. FROM patient_care
  53. WHERE center_code != 1
  54. AND USE_YN = 'Y'
  55. AND center_code IN ( SELECT center_code AS center_code
  56. FROM center_info
  57. WHERE 1 = 1
  58. ]]>
  59. <if test='q != null and q != ""'>
  60. <![CDATA[
  61. AND center_name LIKE CONCAT('%', #{q}, '%')
  62. ]]>
  63. </if>
  64. <if test='locationCode != null and locationCode != ""'>
  65. <![CDATA[
  66. AND jurisdiction = #{locationCode}
  67. ]]>
  68. </if>
  69. <![CDATA[
  70. )
  71. GROUP BY DATE_FORMAT( hospitalization_date ,'%Y-%m-%d' )
  72. ) B
  73. ON DL.inDate = B.hDate
  74. ]]>
  75. </select>
  76. <select id="selectStatisticsPatientSum" parameterType="PatientDTO" resultType="PatientDTO">
  77. <![CDATA[
  78. SELECT SUM ( NVL( hTotal, 0 ) ) hTotal,
  79. SUM ( NVL( dTotal, 0 ) ) dTotal,
  80. SUM ( NVL( tTotal, 0 ) ) tTotal,
  81. SUM ( NVL( eTotal, 0 ) ) eTotal
  82. FROM ( SELECT TO_CHAR(TO_DATE( #{startDate} ) + LEVEL - 1, 'YYYY-MM-DD') AS inDate
  83. FROM DB_ROOT
  84. CONNECT BY LEVEL <= ( TO_DATE( #{endDate} ) - TO_DATE( #{startDate} ) + 1)
  85. ) DL
  86. LEFT JOIN ( SELECT DATE_FORMAT( disisolation_date ,'%Y-%m-%d' ) AS dDate,
  87. COUNT( CASE WHEN state='D' THEN 1 END ) dTotal,
  88. COUNT( CASE WHEN state='T' THEN 1 END ) tTotal,
  89. COUNT( CASE WHEN state='E' THEN 1 END ) eTotal
  90. FROM patient_care
  91. WHERE center_code != 1
  92. AND USE_YN = 'Y'
  93. AND center_code IN ( SELECT center_code AS center_code
  94. FROM center_info
  95. WHERE 1 = 1
  96. ]]>
  97. <if test='q != null and q != ""'>
  98. <![CDATA[
  99. AND center_name LIKE CONCAT('%', #{q}, '%')
  100. ]]>
  101. </if>
  102. <if test='locationCode != null and locationCode != ""'>
  103. <![CDATA[
  104. AND jurisdiction = #{locationCode}
  105. ]]>
  106. </if>
  107. <![CDATA[
  108. )
  109. GROUP BY DATE_FORMAT( disisolation_date ,'%Y-%m-%d' )
  110. ) A
  111. ON DL.inDate = A.dDate
  112. LEFT JOIN ( SELECT DATE_FORMAT( hospitalization_date ,'%Y-%m-%d' ) AS hDate,
  113. COUNT(*) hTotal
  114. FROM patient_care
  115. WHERE center_code != 1
  116. AND USE_YN = 'Y'
  117. AND center_code IN ( SELECT center_code AS center_code
  118. FROM center_info
  119. WHERE 1 = 1
  120. ]]>
  121. <if test='q != null and q != ""'>
  122. <![CDATA[
  123. AND center_name LIKE CONCAT('%', #{q}, '%')
  124. ]]>
  125. </if>
  126. <if test='locationCode != null and locationCode != ""'>
  127. <![CDATA[
  128. AND jurisdiction = #{locationCode}
  129. ]]>
  130. </if>
  131. <![CDATA[
  132. )
  133. GROUP BY DATE_FORMAT( hospitalization_date ,'%Y-%m-%d' )
  134. ) B
  135. ON DL.inDate = B.hDate
  136. ]]>
  137. </select>
  138. <!-- 위의 쿼리들 필요없다고 함 환자 입퇴소현황 날짜별에서 생치별로 바꿔달라해서 위의 쿼리들 3개 안씀.. -->
  139. <!-- 아래 쿼리들이 환자 입/퇴소 현황 쿼리 -->
  140. <select id="selectStatisticsPatientByCenterCount" parameterType="PatientDTO" resultType="int">
  141. <![CDATA[
  142. SELECT COUNT(*) total
  143. FROM CENTER_INFO CI
  144. WHERE 1 = DECODE( NVL( CI.expiration_date, '' ), '', 1, IF( DATE_FORMAT( CI.expiration_date , '%Y-%m-%d %H:%i' ) > #{registDayTime}, 1, 0 ) )
  145. AND CI.CENTER_CODE != 1
  146. ]]>
  147. <if test='q != null and q != ""'>
  148. <![CDATA[
  149. AND CI.CENTER_NAME LIKE CONCAT('%', #{q}, '%')
  150. ]]>
  151. </if>
  152. <if test='locationCode != null and locationCode != ""'>
  153. <![CDATA[
  154. AND CI.jurisdiction = #{locationCode}
  155. ]]>
  156. </if>
  157. </select>
  158. <select id="selectStatisticsPatientByCenterList" parameterType="PatientDTO" resultType="PatientDTO">
  159. <![CDATA[
  160. SELECT DECODE(CI.CENTER_CODE, NULL, '총계', CI.CENTER_NAME) AS centerName,
  161. ( SELECT LI.LOCATION_NAME
  162. FROM LOCATION_INFO LI
  163. WHERE CI.jurisdiction = LI.LOCATION_CODE) AS jurisdictionName,
  164. DECODE(CI.CENTER_CODE, NULL, SUM( dTotal) ,NVL( A.dTotal, 0 ) ) dTotal,
  165. DECODE(CI.CENTER_CODE, NULL, SUM( tTotal), NVL( A.tTotal, 0 ) ) tTotal,
  166. DECODE(CI.CENTER_CODE, NULL, SUM( eTotal), NVL( A.eTotal, 0 ) ) eTotal,
  167. DECODE(CI.CENTER_CODE, NULL, SUM( hTotal), NVL( B.hTotal, 0 ) ) hTotal
  168. FROM CENTER_INFO CI
  169. LEFT JOIN ( SELECT center_code,
  170. COUNT( CASE WHEN state='D' THEN 1 END ) dTotal,
  171. COUNT( CASE WHEN state='T' THEN 1 END ) tTotal,
  172. COUNT( CASE WHEN state='E' THEN 1 END ) eTotal
  173. FROM patient_care
  174. WHERE center_code != 1
  175. AND USE_YN = 'Y'
  176. AND DATE_FORMAT( disisolation_date ,'%Y-%m-%d' ) = #{registDay}
  177. GROUP BY center_code
  178. ) A
  179. ON A.CENTER_CODE = CI.CENTER_CODE
  180. LEFT JOIN ( SELECT center_code,
  181. COUNT(*) hTotal
  182. FROM patient_care
  183. WHERE center_code != 1
  184. AND USE_YN = 'Y'
  185. AND DATE_FORMAT( hospitalization_date ,'%Y-%m-%d' ) = #{registDay}
  186. GROUP BY center_code
  187. ) B
  188. ON B.CENTER_CODE = CI.CENTER_CODE
  189. WHERE 1 = DECODE( NVL( CI.expiration_date, '' ), '', 1, IF( DATE_FORMAT( CI.expiration_date , '%Y-%m-%d %H:%i' ) > #{registDayTime}, 1, 0 ) )
  190. AND CI.CENTER_CODE != 1
  191. ]]>
  192. <if test='q != null and q != ""'>
  193. <![CDATA[
  194. AND CI.CENTER_NAME LIKE CONCAT('%', #{q}, '%')
  195. ]]>
  196. </if>
  197. <if test='locationCode != null and locationCode != ""'>
  198. <![CDATA[
  199. AND CI.jurisdiction = #{locationCode}
  200. ]]>
  201. </if>
  202. <![CDATA[
  203. GROUP BY CI.CENTER_CODE WITH ROLLUP HAVING 1 = 1
  204. ORDER BY NVL(CI.CENTER_NAME, '!')
  205. LIMIT #{limit}, #{limitMax}
  206. ]]>
  207. </select>
  208. </mapper>