読者です 読者をやめる 読者になる 読者になる

DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

EFファイル統合を自力でやってみる SQLでの実装(2)

前回までの手続きで、「Eファイルの入ったテーブル」「Fファイルの入ったテーブル」「空のEFテーブル」が出来ました。
今回はこの三つを使ってEFファイルをでっち上げてみます。
まず、EFファイルの明細点数・金額はFファイルの3つの項目をくっつけたものなので、それを用意しておきましょう。

#まずFファイルに新しいカラムを追加する
ALTER TABLE FTEST
ADD COLUMN 明細点数・金額 double precision;
#続いて該当の3項目を合成する
UPDATE FTEST
SET 明細点数・金額 = 行為明細点数 + 行為明細薬剤料 + 行為明細材料料

いよいよEFテーブルにデータを流し込んでいきます。
まずはEファイルの中身を入れましょう。

INSERT INTO EFTEST (施設コード,データ識別番号,退院年月日,入院年月日,
データ区分,順序番号,病院点数マスタコード,レセプト電算コード,解釈番号,診療明細名称,
行為点数,行為薬剤料,行為材料料,行為回数,保険者番号,レセプト種別コード,実施年月日,
レセプト科区分,診療科区分,医師コード,病棟コード,病棟区分,入外区分,施設タイプ)
Select 施設コード,データ識別番号,退院年月日,入院年月日,
データ区分,順序番号,病院点数マスタコード,レセプト電算コード,解釈番号,診療行為名称,
行為点数,行為薬剤料,行為材料料,行為回数,保険者番号,レセプト種別コード,実施年月日,
レセプト科区分,診療科区分,医師コード,病棟コード,病棟区分,入外区分,施設タイプ
from ETEST

このうち行為明細番号は、Fファイルを流し込む前に0を設定する必要があります。
(Fファイルでは行為明細番号は1から始まる連番ですが、実際のEFファイルでは0から始まっています。
これは、Eファイル由来のレコードに0が振られているためです) 処理そのものは簡単ですので、さっさとやってしまいましょう。

UPDATE ef1511test
SET 行為明細番号 = 0

続けてFファイルを流し込みます。上と同じような感じです。

INSERT INTO EF1511TEST (施設コード,データ識別番号,退院年月日,入院年月日,
データ区分,順序番号,行為明細番号,病院点数マスタコード,レセプト電算コード,解釈番号,診療明細名称,
使用量,基準単位,明細点数・金額,円点区分,出来高実績点数)
Select 施設コード,データ識別番号,退院年月日,入院年月日,
データ区分,順序番号,行為明細番号,病院点数マスタコード,レセプト電算コード,解釈番号,診療明細名称,
使用量,基準単位,明細点数・金額,円点区分,出来高実績点数
from f1511test

問題はここからです。
現状では「実施年月日」が穴だらけになっていますが、それでは困りますね。
穴埋めする方法は調べると色々出てきます。例えば、連番で穴埋めする方法、とかで検索すると色んなやり方がありますが、ここではあえて泥臭い方法をやってみましょう。

select f.データ識別番号,f.入院年月日,f.データ区分,f.順序番号,f.施設コード,f.退院年月日,f.行為明細番号,
f.病院点数マスタコード,f.レセプト電算コード,f.解釈番号,f.診療明細名称,f.使用量,
f.基準単位,f.明細点数・金額,f.円点区分,f.出来高実績点数,f.出来高包括フラグ,
f.行為点数,f.行為薬剤料,f.行為材料料,f.行為回数,f.保険者番号,f.レセプト種別コード,f.実施年月日,
f.レセプト科区分,f.診療科区分,f.医師コード,f.病棟コード,f.病棟区分,f.入外区分,f.施設タイプ,e.行為回数 AS 行為回数2,e.実施年月日 AS 実施年月日2,e.診療科区分 AS 診療科区分2,e.医師コード AS 医師コード2,e.病棟コード AS 病棟コード2,e.病棟区分 AS 病棟区分2
from EFTEST AS f
LEFT OUTER JOIN ETEST AS e
USING(データ識別番号,入院年月日,データ区分,順序番号)

クエリを実行すると、一番最後の列に「○○○○2」という列が出来ていて、そこに穴埋めされた実施年月日等が入っています。あとはこれをExcelか何かで加工すれば、EFファイルのいっちょ上がりです。 お疲れ様でした。

...いやいやいや。
これは幾らなんでもめんどくさいでしょう。
正直、こんな処理をやるのにSQLが向いているとは思えません。
私はこの一連の処理をやり終えてから気付いたのですが(先に気付け)、どう考えてもスクリプトを書いた方が早いです。
というわけで次回はPythonを使った実装を試してみましょう。