何かが発生した場合に特定の結果を返し、何かが発生した場合は他の結果を拒否し、さらに何かが発生していない場合は他の結果を拒否するクエリがあります。
現在の出力例は次のとおりです。
VISIT ID | MRN | ORD NUM | ORD STS | ORD DESC
123456 | 123 | 987654 | ACTIVE | URINE TEST
123456 | 123 | 987654 | IN PROG | URINE TEST
123456 | 123 | 987654 | COMPLETE| URINE TEST
123456 | 123 | 987321 | ACTIVE | INSERT FOLEY
123456 | 123 | 987321 | IN PROG | INSERT FOLEY
123456 | 123 | 987321 | COMPLETE| INSERT FOLEY
124578 | 321 | 654321 | ACTIVE | URINE TEST
124578 | 321 | 654321 | IN PROG | URINE TEST
124578 | 321 | 654321 | COMPLETE| URINE TEST
END OF REPORT
私の望ましい出力は次のとおりです。
VISIT ID | MRN | ORD NUM | ORD STS | ORD DESC
123456 | 123 | 987654 | ACTIVE | URINE TEST
123456 | 123 | 987654 | IN PROG | URINE TEST
123456 | 123 | 987654 | COMPLETE| URINE TEST
123456 | 123 | 987321 | ACTIVE | INSERT FOLEY
123456 | 123 | 987321 | IN PROG | INSERT FOLEY
123456 | 123 | 987321 | COMPLETE| INSERT FOLEY
END OF REPORT
尿検査がある訪問 ID を表示したいのは、INSERT FOLEY
注文または注文のいずれかがある場合のみですREMOVE FOLEY
。ですから、私が来て尿検査だけを受けたら、レポートに出るべきではありません.
これが私のクエリです:
-- FOLEY CATHETER ORDERS
-- VARIABLE DECLARATION AND INITIALIZATION
DECLARE @SD DATETIME
DECLARE @ED DATETIME
SET @SD = '2013-06-01';
SET @ED = '2013-06-30';
-- COLUMN SELECTION
SELECT PV.PtNo_Num AS 'VISIT ID'
, PV.Med_Rec_No AS 'MRN'
, PV.vst_start_dtime AS 'ADMIT'
, PV.vst_end_dtime AS 'DISC'
, PV.Days_Stay AS 'LOS'
, PV.pt_type AS 'PT TYPE'
, PV.hosp_svc AS 'HOSP SVC'
, SO.ord_no AS 'ORDER NUMBER'
--, SO.ent_dtime AS 'ORDER ENTRY TIME'
--, DATEDIFF(HOUR,PV.vst_start_dtime,SO.ent_dtime) AS 'ADM TO ENTRY HOURS'
, CASE
WHEN SO.svc_desc = 'INSERT FOLEY CATHETER' THEN 'INSERT FOLEY'
WHEN SO.svc_desc = 'INSERT INDWELLING URINARY CATHETER TO GRAVITY DRAINAGE' THEN 'INSERT FOLEY'
WHEN SO.svc_desc = 'REMOVE INDWELLING URINARY CATHETER' THEN 'REMOVE FOLEY'
ELSE SO.svc_desc
END AS 'ORD DESC'
, CASE
WHEN OSM.ord_sts = 'ACTIVE' THEN '1 - ACTIVE'
WHEN OSM.ord_sts = 'IN PROGRESS' THEN '2 - IN PROGRESS'
WHEN OSM.ord_sts = 'COMPLETE' THEN '3 - COMPLETE'
WHEN OSM.ord_sts = 'CANCEL' THEN '4 - CANCEL'
WHEN OSM.ord_sts = 'DISCONTINUE' THEN '5 - DISCONTINUE'
WHEN OSM.ord_sts = 'SUSPEND' THEN '6 - SUSPEND'
END AS 'ORDER STATUS'
, SOS.prcs_dtime AS 'ORDER STATUS TIME'
, DATEDIFF(DAY,PV.vst_start_dtime,SOS.prcs_dtime) AS 'ADM TO ORD STS IN DAYS'
-- DB(S) USED
FROM smsdss.BMH_PLM_PtAcct_V PV
JOIN smsmir.sr_ord SO
ON PV.PtNo_Num = SO.episode_no
JOIN smsmir.sr_ord_sts_hist SOS
ON SO.ord_no = SOS.ord_no
JOIN smsmir.ord_sts_modf_mstr OSM
ON SOS.hist_sts = OSM.ord_sts_modf_cd
-- FILTER(S)
WHERE PV.Adm_Date BETWEEN @SD AND @ED
AND (SO.svc_desc LIKE 'INSERT FOLEY CATHETER'
OR SO.svc_desc LIKE 'INSERT INDWELLING URINARY CATHETER TO GRAVITY DRAINAGE'
OR SO.svc_desc LIKE 'REMOVE INDWELLING URINARY CATHETER'
OR SO.svc_desc LIKE 'URIN%'
)
-- TRYING TO KICK OUT PATIENTS WHO DID NOT GET A FOLEY CATHETER ORDER
-- OF ANY TYPE
--AND PV.PtNo_Num NOT IN (
-- SELECT SO.ord_no
-- FROM smsdss.BMH_PLM_PtAcct_V PV
-- JOIN smsmir.sr_ord SO
-- ON PV.PtNo_Num = SO.episode_no
-- JOIN smsmir.sr_ord_sts_hist SOS
-- ON SO.ord_no = SOS.ord_no
-- JOIN smsmir.ord_sts_modf_mstr OSM
-- ON SOS.hist_sts = OSM.ord_sts_modf_cd
-- WHERE (SO.svc_desc != 'INSERT FOELY CATHETER'
-- OR SO.svc_desc != 'INSERT INDWELLING URINARY CATHETER TO GRAVITY DRAINAGE'
-- OR SO.svc_desc != 'REMOVE INDWELLING URINARY CATHETER'
-- )
--)
-- KICKS OUT DISCONTINUED ORDERS
AND SO.ord_no NOT IN (
SELECT SO.ord_no
FROM smsdss.BMH_PLM_PtAcct_V PV
JOIN smsmir.sr_ord SO
ON PV.PtNo_Num = SO.episode_no
JOIN smsmir.sr_ord_sts_hist SOS
ON SO.ord_no = SOS.ord_no
JOIN smsmir.ord_sts_modf_mstr OSM
ON SOS.hist_sts = OSM.ord_sts_modf_cd
WHERE OSM.ord_sts = 'DISCONTINUE'
AND (SO.svc_desc LIKE 'INSERT FOLEY CATHETER'
OR SO.svc_desc LIKE 'INSERT INDWELLING URINARY CATHETER TO GRAVITY DRAINAGE'
OR SO.svc_desc LIKE 'REMOVE INDWELLING URINARY CATHETER'
OR SO.svc_desc LIKE 'URINE%'
)
)
残りの部分を操作しようとしているコードは、完全にコメントアウトされているセクションです。クエリのコメント部分では、意味を実行するのにかなり長い時間がかかり、t>5 minutes
結果が返されません。その部分がなければ、クエリはすべての結果をt<2 minutes
前もって感謝します、