- PR -

登録レコードと取消レコードの間にあるレコードを除きたいのですが、取得方法についてご教示下さい

1
投稿者投稿内容
モリゾウ
会議室デビュー日: 2009/03/10
投稿数: 2
投稿日時: 2009-03-10 21:06
初めまして。モリゾウと申します。
下記のような定義とレコードの状態のテーブルから、
不要なデータを除いてデータ取得を行いたいです。

【テーブル定義とレコードの状態】
PKeyは「項番」ですカッコ内はコード値名称です。

項番|顧客コード|処理区分|項目イ|項目ロ|項目ハ|削除フラグ|
01|10000|1(登録)|○○○|△△△|×××|00000|
02|10000|1(登録)|○○○|△△△|×××|00000|
03|10000|3(訂正)|○○○|△△△|×××|00000|
04|10000|9(取消)|○○○|△△△|×××|99999|
05|10000|1(登録)|○○○|△△△|×××|00000|
06|10000|3(訂正)|○○○|△△△|×××|00000|
07|10000|9(取消)|○○○|△△△|×××|00000|
08|22222|1(登録)|○○○|△△△|×××|00000|
09|22222|3(訂正)|○○○|△△△|×××|00000|

上記の状態から、顧客コード単位に
登録から取消の間に発生した全てのレコードを不要データとして除いて
取得したいのです。

しかし、取消であっても削除フラグが00000の場合は間に発生した
レコードは取得対象として、
処理区分=9(取消) and 削除フラグ=99999
のレコードが存在した場合のみ、
登録から取消の間に発生したレコードを不要としたいのです。

取得後のレコードは下記の通りとなります。

項番|顧客コード|処理区分|項目イ|項目ロ|項目ハ|削除フラグ|
01|10000|1(登録)|○○○|△△△|×××|00000|
04|10000|9(取消)|○○○|△△△|×××|99999|
05|10000|1(登録)|○○○|△△△|×××|00000|
06|10000|3(訂正)|○○○|△△△|×××|00000|
07|10000|9(取消)|○○○|△△△|×××|00000|
08|22222|1(登録)|○○○|△△△|×××|00000|
09|22222|3(訂正)|○○○|△△△|×××|00000|

顧客コード=10000について、
最初の登録レコードから削除フラグ=9の取消レコードまでの
項番2,3のレコードが不要としたいです。
項番5,6,7については、取消レコードですが、削除フラグ≠9なので、
項番6は不要レコードとはなりません。

以上です。複雑でわかりづらいと思いますが、
よろしくお願いいたします。
不明な点ありましたら、ご連絡下さい。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-03-10 22:42
DB が何なのかわかりませんが
ストアドか PL/SQL でカーソル作ってループしたら簡単ですよ。
モリゾウ
会議室デビュー日: 2009/03/10
投稿数: 2
投稿日時: 2009-03-10 22:46
TO:Kingさん

 返信ありがとうございます。
>DB が何なのかわかりませんが

→確かに書き漏らしてしまいました。
 DBはSQLサーバー2000です。
ストアドプロシージャでカーソルを作ってはどうか?
ということですね。

カーソルの利用を検討します。
アドバイスありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)