[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-tech:01231] Re: 薬剤消費量について



フジです。

私が1ヶ月の薬剤の使用量をExcelに取り込む時に使ったSQL文は
下記のとおりです。

SELECT tbl_tensu.srycd, tbl_tensu.name, tbl_sryact.srysuryo1*tbl_sryacct.zaikaisu,tbl_tensu.taniname 
 FROM tbl_sryacct tbl_sryacct, tbl_sryact tbl_sryact, tbl_tensu tbl_tensu 
 WHERE tbl_sryacct.zainum = tbl_sryact.zainum AND tbl_sryacct.ptid = tbl_sryact.ptid AND tbl_tensu.srycd = tbl_sryact.srycd1 AND tbl_sryacct.zaiten > 0 AND ((tbl_sryacct.sryym='200404') AND (tbl_tensu.yukoedymd='99999999') AND (tbl_tensu.srycd Like '6%'))
UNION ALL SELECT tbl_tensu.srycd, tbl_tensu.name, tbl_sryact.srysuryo2*tbl_sryacct.zaikaisu,tbl_tensu.taniname 
 FROM tbl_sryacct tbl_sryacct, tbl_sryact tbl_sryact, tbl_tensu tbl_tensu 
 WHERE tbl_sryacct.zainum = tbl_sryact.zainum AND tbl_sryacct.ptid = tbl_sryact.ptid AND tbl_tensu.srycd = tbl_sryact.srycd2 AND tbl_sryacct.zaiten > 0 AND ((tbl_sryacct.sryym='200404') AND (tbl_tensu.yukoedymd='99999999') AND (tbl_tensu.srycd Like '6%')) 
UNION ALL SELECT tbl_tensu.srycd, tbl_tensu.name, tbl_sryact.srysuryo3*tbl_sryacct.zaikaisu,tbl_tensu.taniname 
 FROM tbl_sryacct tbl_sryacct, tbl_sryact tbl_sryact, tbl_tensu tbl_tensu 
 WHERE tbl_sryacct.zainum = tbl_sryact.zainum AND tbl_sryacct.ptid = tbl_sryact.ptid AND tbl_tensu.srycd = tbl_sryact.srycd3 AND tbl_sryacct.zaiten > 0 AND ((tbl_sryacct.sryym='200404') AND (tbl_tensu.yukoedymd='99999999') AND (tbl_tensu.srycd Like '6%')) 
UNION ALL SELECT tbl_tensu.srycd, tbl_tensu.name, tbl_sryact.srysuryo4*tbl_sryacct.zaikaisu,tbl_tensu.taniname 
 FROM tbl_sryacct tbl_sryacct, tbl_sryact tbl_sryact, tbl_tensu tbl_tensu 
 WHERE tbl_sryacct.zainum = tbl_sryact.zainum AND tbl_sryacct.ptid = tbl_sryact.ptid AND tbl_tensu.srycd = tbl_sryact.srycd4 AND tbl_sryacct.zaiten > 0 AND ((tbl_sryacct.sryym='200404') AND (tbl_tensu.yukoedymd='99999999') AND (tbl_tensu.srycd Like '6%')) 
UNION ALL SELECT tbl_tensu.srycd, tbl_tensu.name, tbl_sryact.srysuryo5*tbl_sryacct.zaikaisu,tbl_tensu.taniname 
 FROM tbl_sryacct tbl_sryacct, tbl_sryact tbl_sryact, tbl_tensu tbl_tensu 
 WHERE tbl_sryacct.zainum = tbl_sryact.zainum AND tbl_sryacct.ptid = tbl_sryact.ptid AND tbl_tensu.srycd = tbl_sryact.srycd5 AND tbl_sryacct.zaiten > 0 AND ((tbl_sryacct.sryym='200404') AND (tbl_tensu.yukoedymd='99999999') AND (tbl_tensu.srycd Like '6%'))

簡単に解説すると、tbl_sryactでは薬剤の数量がsrysuryo1〜srysuryo5に分かれて
入るのでUNION ALLで結果をまとめています。
tbl_sryacct.sryym='200404'のところで調べたい月を設定します。
tbl_sryacctとtbl_sryactは、ptidとzainumをキーにして結合します。
tbl_tensu.srycd Like '6%'で、薬剤以外が出てこないようにしています。
薬剤名や単位はtbl_tensuを参照していますが、tbl_tensu.yukoedymd='99999999'で
最新の点数表に載ってる薬剤だけにしぼっています。(正確には、調べたい時が
yukostymd〜yukoedymdの間にあるレコードを参照べきです。なお、これがないと
点数改正があるとダブって数えてしまいます)

結果は、同じ薬剤がばらばらと出てくるので、srycdでソートして集計する必要が
あります。また、マーズレンSのように0.67gで1包になっている薬剤を2.0g分3
として処方している場合は、端数の処理も考慮する必要があります。

以上、ご参考まで。