王 翔 陸 琴
1 蘇州瑞華骨科醫(yī)院信息處,215000 江蘇 蘇州; 2 蘇州瑞華骨科醫(yī)院病案管理辦公室,215000 江蘇 蘇州
近年來,我國醫(yī)院對于信息化的發(fā)展越來越重視,建成智慧醫(yī)院已成為各醫(yī)院發(fā)展的目標(biāo),中國醫(yī)院將會(huì)走向全新的時(shí)代。這個(gè)偉大變革的背后不僅僅是實(shí)現(xiàn)醫(yī)院系統(tǒng)信息化和智能化,更重要的是最大限度地挖掘信息系統(tǒng)所產(chǎn)生的海量數(shù)據(jù)。而數(shù)據(jù)的挖掘離不開工具,SQL作為一種適用于關(guān)系數(shù)據(jù)庫的結(jié)構(gòu)化語言,不僅允許用戶與數(shù)據(jù)庫相互作用,而且還具有數(shù)據(jù)定義、數(shù)據(jù)檢索、數(shù)據(jù)更新、訪問控制、數(shù)據(jù)共享等功能[1]。這使得SQL語言與醫(yī)院信息系統(tǒng)完美結(jié)合,推動(dòng)著醫(yī)院往智慧醫(yī)院的方向不斷前進(jìn)。本文通過一些實(shí)例,介紹針對各部門提出的臨時(shí)性報(bào)表需求,采用SQL語句響應(yīng)需求并完美解決。
依據(jù)等級醫(yī)院評審實(shí)施細(xì)則中危重病人數(shù)據(jù)的統(tǒng)計(jì),在沒有現(xiàn)成系統(tǒng)產(chǎn)出報(bào)表的情況下,可選擇SQL中的SELECT語句進(jìn)行統(tǒng)計(jì)。SELECT語句是SQL語句中最常用的語句。SELECT 語句的一般形式如下:
SELECT select_list(字段)
FROM source(數(shù)據(jù)表名)
WHERE condition(s)(一個(gè)或多個(gè)限制條件)
SELECT A.ZYHM住院號碼,A.BRXM病人姓名,
B.NAME出院科室,A.CYRQ出院日期
FROM BA_SYJBK A,YY_KSBMK B
WHERE A.ZYWZ=‘1’ AND
A.CYKS=B.ID AND A.CYRQ>=‘2021010100:00:00’
AND A.CYRQ<=‘2021013123:59:59’
該語句統(tǒng)計(jì)的是2021年1月份某院出院病人中危重病人數(shù)。統(tǒng)計(jì)的數(shù)據(jù)表中必須包含住院號、病人姓名、出院科別和出院日期字段, BA_SYJBK表中只有科室代碼,為實(shí)現(xiàn)表字段完整性,使用多表聯(lián)接的方法,分別用A代表BA_SYJBK,B代表YY_KSBMK,利用兩表中的2個(gè)主鍵進(jìn)行相聯(lián)(A.CYKS=B.ID),聯(lián)接成1個(gè)表。見圖1。增加約束條件,一是A表中的ZYWZ(住院期間危重),在A表中ZYWZ字段0代表“不是危重”,1代表“危重”,所以ZYWZ=1,其為主要的約束條件;二是時(shí)間約束,按A表中的CYRQ(出院日期)字段為約束條件,統(tǒng)計(jì)出某個(gè)時(shí)間段內(nèi)的所有數(shù)據(jù)。
圖1 首頁-科別關(guān)聯(lián)圖
統(tǒng)計(jì)住院病人在某一段時(shí)間內(nèi)做DSA檢查所產(chǎn)生的費(fèi)用明細(xì)。
SELECT YPMC AS物品名稱,YPDW AS物品單位,YPDJ AS物品單價(jià),
SUM(YPSL)物品總數(shù)量,SUM(ZJE)總計(jì)
FROM ZY_BRFYMXK WHERE CZYH=‘0193’
AND QQRQ>=2021010100:00:00’AND QQRQ<=‘2021013123:59:59’
GROUP BY YPMC,YPDJ,YPDW
UNION ALL
SELECT YPMC AS物品名稱,YPDW AS物品單位,YPDJ AS物品單價(jià),
SUM(YPSL)物品總數(shù)量,SUM(ZJE)總計(jì)
FROM ZY_BRFYMXK WHERE
(YPDM='0725' OR YPDM='0717' OR YPDM='0716')
AND QQRQ>=‘2021010100:00:00’AND QQRQ<=‘2021013123:59:59’
AND CZYH<>‘0193’
GROUP BY YPMC,YPDJ,YPDW
該語句執(zhí)行后就可以統(tǒng)計(jì)出DSA檢查室2021年1月份產(chǎn)生的費(fèi)用明細(xì)。各表字段對應(yīng)的名稱見圖2。該統(tǒng)計(jì)語句中用到了UNION ALL,因一部分藥品是由DSA檢查室直接領(lǐng)取,另一部分藥品由護(hù)士領(lǐng)取,送至DSA檢查室。2種不同的統(tǒng)計(jì)口徑,2次統(tǒng)計(jì)的字段必須保持一致。使用SUM(YPSL)是將相同名稱的耗材或者藥品進(jìn)行相加,SUM(ZJE)則是將相同物品總金額進(jìn)行相加。GROUP BY語句用于結(jié)合合計(jì)函數(shù),根據(jù)1個(gè)或多個(gè)列對結(jié)果集進(jìn)行分組。該語句中對相同物品名稱進(jìn)行了過濾分組,最終合并為1張表,完成了數(shù)據(jù)的統(tǒng)計(jì)。
圖2 費(fèi)用明細(xì)庫字段表示圖
因新冠疫情影響,核酸檢測成為醫(yī)院重要的日常工作,對于核酸被檢測人員數(shù)量的統(tǒng)計(jì)也是非常重要的。它是從一線獲取的重要戰(zhàn)時(shí)報(bào)告,也是醫(yī)院和政府決策的重要依據(jù)。
SELECT C.SFRQ,A.HZXM,B.YPMC,D.SFZH,D.SEX
FROM SF_MZCFK A,SF_MZCFMXK B ,SF_BRJSK C ,SF_BRXXK D
WHERE A.XH=B.CFXH
AND A.JSSJH=C.SJH
AND C.BLH=D.BLH
AND C.YBJSZT=‘2’
AND C.SFRQ BETWEEN ‘20200716’ AND‘20200723’+‘24’
AND B.YPDM IN(‘907786’,‘907788’,‘907830’,‘907832’,‘907834’)
AND B.YLSJ=‘80’
ORDER BY C.SFRQ
該統(tǒng)計(jì)語句屬于多表聯(lián)接,各表中都有主鍵與其他表一一對應(yīng),最終從各表中選擇自己想要的字段,組成1個(gè)新的表。見圖3。C表中的YBJSZT(醫(yī)保結(jié)算狀態(tài))0=未結(jié)算,2=結(jié)算。SFRQ使用了“BETWEEN…AND…”,也可以使用“SFRQ>=’日期’ AND SFRQ<=’日期’”。B表中的YPDM在語句中已將所有的核酸檢測收費(fèi)小項(xiàng)目都一一列舉。最終使用ORDER BY 讓統(tǒng)計(jì)數(shù)據(jù)按照SFRQ進(jìn)行排列。
圖3 門診處方結(jié)算關(guān)聯(lián)圖
為了提高服務(wù)質(zhì)量,規(guī)范出院流程,院領(lǐng)導(dǎo)提出在病人出院前一天下午16:30前醫(yī)生需下達(dá)明日出院醫(yī)囑,并在次日10:00前將病人出院相關(guān)資料送至收費(fèi)處,病人結(jié)完賬可直接攜帶相關(guān)資料離開醫(yī)院,簡化流程,提高滿意度。為了更有效地對其進(jìn)行管控,院領(lǐng)導(dǎo)要求信息處對明日出院醫(yī)囑進(jìn)行統(tǒng)計(jì),由于周期比較長,信息處選擇制作成外掛報(bào)表,便于生成固定表格,供院領(lǐng)導(dǎo)實(shí)時(shí)查詢。
CREATE PROC USP_ZY_MRCYYZTJ
@TJ VARCHAR(12)
AS
SET NOCOUNT ON
DECLARE @KSRQ CHAR(16),@JSRQ CHAR(16)
SELECT @KSRQ = CONVERT(VARCHAR(100),GETDATE(),112)+'00:00:00'
SELECT @JSRQ = CONVERT(VARCHAR(100),GETDATE(),112)+'16:30:00'
CREAT TABLE #TEMP1
(
KSMC VARCHAR(64),
KZRMC VARCHAR(64)
)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘手外一科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘手外二科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘手外三科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘手外四科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘手外五科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘足踝一科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘足踝二科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘小兒骨科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘創(chuàng)傷骨科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘脊柱外科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘婦產(chǎn)科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘普通外科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘神經(jīng)外科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘神經(jīng)內(nèi)科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘消化內(nèi)科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘內(nèi)科’,‘XX’)
INSERT #TEMP1 (KSMC ,KZRMC) VALUES (‘ICU’,‘XX’)
SELECT
C.KSMC 科別,
D.KZRMC 科主任,
C.YSXM 組主任,A.CWDM 床位號,A.HZXM 患者姓名,C.BLH 住院號,
A.LRRQ 錄入日期 FEOM
[172.168.3.7].[CISDB].[DBO].[CPOE_LSYZK] A,[172.168.3.7].[CISDB].[DBO].[CPOE_BRSYK] C , #TEMP1 D
WHERE A.YPMC=‘明日出院’ AND A.SYXH=C.SYXH AND C.KSMC=D.KSMC
AND A.LRRQ>=@KSRQ AND A.LRRQ<=@JSRQ
AND A.YZZT IN (0,1,2) ORDER BY C.KSMC,C.YSXM,A.LRRQ ASC
DROP TABLE #TEMP1
該語句中創(chuàng)建了存儲(chǔ)過程,便于以外掛報(bào)表的形式進(jìn)行統(tǒng)計(jì)。首先定義時(shí)間字段,設(shè)定當(dāng)天0:0至當(dāng)天下午16:30的時(shí)間范圍。創(chuàng)建一張臨時(shí)表#TEMP1,報(bào)表中需包含科主任姓名和科別字段,用INSERT語句向臨時(shí)表中插入數(shù)據(jù)。再用SELECT 語句進(jìn)行多表聯(lián)接。語句中用[172.168.3.7].[CISDB].[DBO].[CPOE_LSYZK] 表示數(shù)據(jù)表,是跨服務(wù)器的表示方法,[172.168.3.7]代表服務(wù)器,[CISDB]代表數(shù)據(jù)庫,[DBO]數(shù)據(jù)庫的默認(rèn)用戶,[CPOE_LSYZK]代表數(shù)據(jù)表。表之間的主鍵聯(lián)接依據(jù)見圖4。限制條件中YZZT 0=待審核,1=審核,2=執(zhí)行,3=取消(DC),4=停止。ASC是按升序?qū)y(tǒng)計(jì)的數(shù)據(jù)進(jìn)行排列,最后刪除臨時(shí)表。
圖4 首頁-醫(yī)囑關(guān)聯(lián)圖
醫(yī)院管理決策、臨床與科研等工作都離不開信息支撐。雖然信息系統(tǒng)中的統(tǒng)計(jì)功能可以滿足大部分的數(shù)據(jù)需求,但依然會(huì)存在一些特殊需求無法滿足,這種情況下可以運(yùn)用SQL語句完成數(shù)據(jù)采集及分析工作。
SQL語句使用簡單,即使是非計(jì)算機(jī)專業(yè)人員,通過簡單培訓(xùn)也能很快上手完成查詢操作。在醫(yī)院信息數(shù)據(jù)統(tǒng)計(jì)工作中應(yīng)用SQL語句,能快速響應(yīng)醫(yī)院數(shù)據(jù)統(tǒng)計(jì)需求,為臨床、科研、管理和醫(yī)院服務(wù)提供助力[2]。