過去の桐井戸端BBS (桐ver.8)
11126 併合で最新のデータのみ空白を無視して絞り込みたい 肥田 2001/05/10-07:04
久々に投稿させていただきます。
未だにほとんど会話処理で行っている未熟者です。
桐井戸端BBSのCD−ROMも活用させてもらって大変助かってます。

病院で検査データの処理をしようと思っているのですが、
患者ごとに項目ごとの最新データを別表に併合させています。

 日   名   項目A  項目B  項目C
12日 Aさん   13   15   16 
12日 Bさん    5   20
12日 Cさん   20         8
13日 Aさん   43        16
13日 Cさん   30   22
14日 Bさん        35   20
14日 Aさん        20   15
14日 Cさん   32

----絞り込み-----

    Aさん   43   20   15
    Bさん    5   35   20
    Cさん   32   22    8

-----っという結果にしたいのです。

現在のところ
逆年月日で並べ替え、
最も確率の高い(^^;項目を#Dで絞り込み、
名前で単一化絞り込みをし、
別表を開き名前で併合させています。

この方法だと最も確率の高い項目で絞り込んだときのレコードに
空白ができてしまって、最新データが反映されないケースが発生してしまいます。

なにか良い方法がありますか?ご教授頂ければうれしいな

11127 書き漏らし 肥田 2001/05/10-09:06
記事番号11126へのコメント
すみません。書き漏らしです。

ちなみに検査データの項目数は100以上あります。
11128 Re:書き漏らし 宮城 2001/05/10-09:48
記事番号11127へのコメント
肥田さん、こんにちは。併合時、ヌル以外は書き換える「複写2」を使えばいいと思います。

検査データを年月日順に並べておきます。絞り込みは要りません。
名前で照合し、項目A以下を「複写2」にするだけです。

たとえば、Cさんでしたら、項目Aについては文句なく「32」、項目Bでは13日の「22」を複写後、
14日のデータがきてもヌルですので「22」のままとなります。

(ただし、検査データにスペースが入らないようにご注意ください。
スペース≠ヌルにつき、一見区別つきませんがスペースが生きます。)

11129 私も書き漏らし (^^;; 宮城 2001/05/10-12:17
記事番号11128へのコメント
毎回、検査データ全件対象にしていては大変です。検査データ側に「反映済」フラグをもたせ、
これがヌルのもののみ絞り込んで併合、併合後「済」でもセットするとかすべきです。

いわずもがなですが。

11130 Re:書き漏らし 悲しげ 2001/05/10-17:08
記事番号11128へのコメント
どもっ、肥田さん、宮城さん

>(ただし、検査データにスペースが入らないようにご注意ください。ス
>ペース≠ヌルにつき、一見区別つきませんがスペースが生きます。)

値から推すに、データ型は数値系の型かもしれません。
となると留意すべきは、スペースよりもゼロでしょうね。
「ゼロ」と「未定義」は明らかに異なる結果をもたらします。
「未定義」は検査していないこと、「ゼロ」は検査した結果がゼロであることを意味しますから、
たとえば例示データの次に

15日 Bさん    0    0    0
15日 Aさん    0    0    0
15日 Cさん    0    0    0

と続けば、最新値は全て0となります。
もちろんゼロでなく、本当に未定義であれば、
併合:複写2では期待どおりの結果を得る事ができますけど。
試してみたところ、未定義項目値処理が「ゼロ」「未定義」のいずれの場合でも、これらの挙動は同じでした。

ps:
会話処理で行っているとのことでしたが、テストした一括処理の記述を以下に挙げておきます、参考になれば。(^^)v
---------------------------------------------------------
表 "検査値a.tbl"
並べ替え 条件名="日付順"
表 "検査値b.tbl",索引名="名順"
併合 "検査値a.tbl",両方,編集表=する,終了状態=&実行リターン\
   ,{[名]照合,[項目A]複写2,[項目B]複写2,[項目C]複写2}
表形式編集 ガイド="結果を確認して下さい"
---------------------------------------------------------
少しだけ補足。
宮城さんも仰ってましたが、本格的には、1日分づつ結果を反映させていくべきだと思います
(そして処理済のデータは反映させない)。
が、諸般の事情(^^;)で、数日分まとめて実行するしかないのであれば、
第1の表は日付順で並べ替えておく必要があります。
併合に際しては、先頭行から最終行に向かって実行されるので、
必ず後ろの値が新しいものであるように。
第2の表は、患者氏名の順に索引を作って並べ替えておく必要があります。
こうしておくと、処理速度が劇的に向上するからです。
11149 複写2 (゜o゜) 肥田 2001/05/12-06:02
記事番号11130へのコメント
宮城さん、悲しげさんいつも詳細な追加回答まで本当にありがとうございます。

”複写2”
いつも併合を利用するときに、複写2ってなんだろう?って思いながらそのままにしてました。
こんな時使うのですね(^^;)
正直言って、この問題は長年の課題だったのです。早く聞けば良かった(;;)

>ps:
>会話処理で行っているとのことでしたが、テストした一括処理の
>記述を以下に挙げておきます、参考になれば。(^^)v
>---------------------------------------------------------
>表 "検査値a.tbl"
>並べ替え 条件名="日付順"
>表 "検査値b.tbl",索引名="名順"
>併合 "検査値a.tbl",両方,編集表=する,終了状態=&実行リターン\
>   ,{[名]照合,[項目A]複写2,[項目B]複写2,[項目C]複写2}
>表形式編集 ガイド="結果を確認して下さい"
>---------------------------------------------------------

ぜひ参考にさせていただきます。
Ver5からVer8にのりかえたとき、大体の処理はコマンドボタン内の機能名に書き込むことで処理が済むようになりました。
どうしても、困難なときにイベントを使用するようにしています。
未熟者にはそっちの方が楽ですから(^^;)

>少しだけ補足。
>宮城さんも仰ってましたが、本格的には、1日分づつ結果を反映
>させていくべきだと思います(そして処理済のデータは反映させ
>ない)。
>が、諸般の事情(^^;)で、数日分まとめて実行するしかないのであ
>れば、第1の表は日付順で並べ替えておく必要があります。併合
>に際しては、先頭行から最終行に向かって実行されるので、必ず
>後ろの値が新しいものであるように。
>第2の表は、患者氏名の順に索引を作って並べ替えておく必要が
>あります。こうしておくと、処理速度が劇的に向上するからです。

これは、ほかの処理につても、とてもに参考になるご意見です。
また、開発意欲が沸いてきました。ありがとうございました。


戻る