- - PR -
SQL-変更元NOフィールドを頼りに最新NOに変えたビューを作りたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-08 14:12
いつもお世話になります。
件名が適切かどうか自信がありませんが・・・申し訳ありません。 システムの履歴をどんどん追加していくテーブルがあります。 データの追加、変更などを伝票区分で判断し、 UPDATE等は行わずに常にINSERTするテーブルです。 その中で、オーダー振替という処理があり、 オーダー振替を行ったときには、振替元オーダーNOをセットします。 オーダー振替は何度でも可能です。 データのイメージは以下の通りです。 SEQ オーダーNO 振替元オーダーNO 1 111-01 空白 2 111-01 空白 3 111-02 111-01 ←オーダー振替発生 4 111-02 空白 5 111-02 空白 6 111-03 111-02 ←オーダー振替発生 7 111-03 空白 上記の場合、全てのデータのオーダーNOを「111-03」 と返してくるビューを作りたいのですが、可能でしょうか。 その場合、どのようなSQLになるのかご教授いただけないでしょうか。 何卒、よろしくお願い致します。 | ||||||||
|
投稿日時: 2007-11-08 14:49
オーダー振替というのは、空白を振替元オーダーNOでUPDATEする処理ではないの でしょうか? 空白というのは、NULLではなく、本当に空白を格納しているのですか?
具体的に、どういう検索結果を希望しているのでしょうか? オーダーNO列の値でなく、無条件に定数で「111-03」を返して欲しいという訳 ではないですよね? それと、RDBMS名とバージョンを明記してください。 | ||||||||
|
投稿日時: 2007-11-08 14:58
忠犬さん、書き込み有難うございます。
説明不足で申し訳ありません。 ・DBは SQLServer2005 です。 ・「空白」と書いたのは、本当は半角スペースです。 当システムでは「半角スペース=空白」です。
はい。振替元オーダーNOに振替前のオーダーNOが入った新しいレコードがINSERTされます。 欲しい結果は、上記7件ののデータを SEQ オーダーNO 振替元オーダーNO 1 111-03 空白 2 111-03 空白 3 111-03 111-01 4 111-03 空白 5 111-03 空白 6 111-03 111-02 7 111-03 空白 と、振替前のデータも全て最新のオーダーNOを表示した状態のデータです。 もちろん固定文字列ではありません。 ややこしくて申し訳ありませんが、何卒よろしくお願い致します。 | ||||||||
|
投稿日時: 2007-11-08 15:30
あまり深読みせず、提示された条件だけでのSQL例です。
| ||||||||
|
投稿日時: 2007-11-08 18:20
忠犬さん、書き込み有難うございます。
すみません。私の説明が悪かったようです。 SEQ オーダーNO 振替元オーダーNO 1 111-01 空白 2 111-01 空白 3 111-02 111-01 ←オーダー振替発生 4 111-02 空白 5 111-02 空白 6 111-03 111-02 ←オーダー振替発生 7 111-03 空白 8 111-04 空白 ←オーダー振替発生してないデータ 9 111-05 空白 ←オーダー振替発生してないデータ の場合、 SEQ オーダーNO 振替元オーダーNO 1 111-03 空白 2 111-03 空白 3 111-03 111-01 ←オーダー振替発生 4 111-03 空白 5 111-03 空白 6 111-03 111-02 ←オーダー振替発生 7 111-03 空白 8 111-04 空白 ←オーダー振替発生してないデータ 9 111-05 空白 ←オーダー振替発生してないデータ ・・・のような結果が返ってきて欲しいのです。 いかがでしょうか・・・。 | ||||||||
|
投稿日時: 2007-11-08 21:23
さっぱりわからない VIEWだから問い合わせを実行するんですよね?
何をどうしたいのかSTEPごとに説明してください | ||||||||
|
投稿日時: 2007-11-08 22:13
たぶんやりたいことは、再帰クエリなのだと思います。
SQL Server 2005で、SQL-99準拠のWITH句が実装されているので、クエリとしては 可能なように思いますが、同一キー値の別の行で、上位のキー値を持っていたり、 空白だったりする点を工夫する必要があるような。 無理に再帰クエリを使うより、ストアドプロシジャ化した方が性能が出せるかも。 | ||||||||
|
投稿日時: 2007-11-09 08:54
かなり説明が悪くてご迷惑をおかけしております。
本当に申し訳ありません。 説明から省いていましたが、項目には伝票区分という項目もあります。 伝票区分で何のデータなのかを知ることが出来ます。 もちろん伝票区分のほかにも入庫日等色々な項目があります。 伝票区分で判断する情報は、例えば、 ・入庫 ・データ修正 ・出庫 ・オーダー振替 ・削除 ・・・等々です。 仮に伝票区分を以下のように設定して流れを説明します。 ・入庫 100 ・データ修正 200 ・出庫 300 ・オーダー振替 400 SEQ オーダーNO 振替元オーダーNO 伝票区分 1 111-01 空白 100 ←入庫発生 2 111-01 空白 200 ←データ修正発生 3 111-02 111-01 400 ←オーダー振替発生 4 111-02 空白 200 ←データ修正発生 5 111-02 空白 300 ←出庫発生 ・・・このように、入庫、出庫などの作業が発生した毎にデータが作成されます。 この場合、オーダーNOは途中から 「111-01」→「111-02」に変更されてしまいますが、 オーダーNOに「111-01」を持つデータも「111-02」を持つデータも同じ荷物をあらわすデータなのです。 ですので、「同じ荷物だよ」とわかるようにしたいのです。 そして、その時は最新のオーダーNOを表示したいのです。 ストアドプロシージャも考えたのですが、 その場合、1件1件自分のオーダーNOを 振替元オーダーNOに持っているデータを探していく作業を 繰り返すことになるのでしょうか・・・・? オーダー振替は1回とは限らないので、なんだかどうしてよいかわからなくなってしまって・・・。 いかがでしょうか?再帰クエリというのがどういうものかわかっていないので 今から調べますが、何かアドバイスがあればよろしくお願い致します。 |