別レコードと比較条件文
下記のテーブルがあります。
・番号1から始まり番号が2に採番されると、履歴番号に番号1が入ります。
・履歴番号はひとつ前の番号を持ちます。
・Aテーブルのレコード数は100以上あります。
Aテーブル
ID 番号 履歴番号
A 1 NULL
A 2 1
A 3 2
B 1 NULL
B 2 1
B 3 2
結果として出力させたいのは、変更回数です。
・履歴番号は実際のデータですと10桁の複雑な文字列です。
ほしい出力結果
ID 番号 履歴番号 変更回数
A 1 NULL 0
A 2 1 1
A 3 2 2
B 1 NULL 0
B 2 1 1
B 3 2 2
行いたい条件式とは、
一行目:履歴番号がNULLのときは変更回数0とする。
二行目:履歴番号が他レコードの番号と一致する場合、1を持つ。そのレコードの履歴回数がNULLなら判定終わり。
三行目:履歴番号が他レコードの番号と一致する場合、1を持つ。そのレコードの履歴番号が更に他レコードと一致する場合、2を持つ。そのレコードの履歴回数がNULLなら判定終わり。
このようにして変更回数を設定したいのですが、思いつきませんのでご教示お願いできますでしょうか。
試してみたのは、DECODE(履歴番号,'','0',番号,1)
とまでためしに作りましたが、同じレコード同士の比較になってしまうため、比較できません。
No.9ベストアンサー
- 回答日時:
>一行目:履歴番号がNULLのときは変更回数0とする。
>二行目:履歴番号が他レコードの番号と一致する場合、1を持つ。そのレコードの履歴回数がNULLなら判定終わり。
>三行目:履歴番号が他レコードの番号と一致する場合、1を持つ。そのレコードの履歴番号が更に他レコードと一致する場合、2を持つ。そのレコードの履歴回数がNULLなら判定終わり。
と言うこと前提に結論です。SQLでは書けません。フロントエンドでの処理が必要です。
つまり、一行しかヒットしなかった場合は当然履歴番号はNULLですね。でそのIDのレコード取得は終了ですね。
二行ヒットした場合は、NULLデータの処理と履歴を持つレコードの処理が必要になりますね。つまりここで二重作業(レコードの再検索)が必要になります。
さらに三行ヒットした場合、上記に加えて三行目の処理も必要になります。(再度のレコードの再検索)
しかしレコード数は一定ではないと推察しますので、一回のSQL文でこの様な全データを取得するのは不可能と考えます。
また常に3レコードあるとすれば何とかなりそうですが3レコード以上の場合もあるとすれば1回のSQL文でこのようなデータを取得するは不可能です。
行うとすれば、ID毎に必要な処理をさせてワークテーブルにINSERTし、更新回数を設定する。出力結果としてワークテーブルの内容を出力するという方法しか今の私には思いつきません。
No.8
- 回答日時:
> 同じようなSQL文は試したのですが・・エラーでした。
提示されていないものについてのコメントは出来ません。
> ・start withではなくwithなのでしょうか?
漏れましたね。
ORACLEの無い環境で回答してます。
> ・WHERE句で条件指定したい場合は、withおよびCONNECT BYはどこに入れるのでしょうか?
提示したサイトにすべて解説されています。
ページをめくって見てください。
No.7
- 回答日時:
考えて欲しかったけど面倒なので回答します。
SELECT ID, 番号, 履歴番号, LEVEL - 1 AS 変更回数
FROM Aテーブル
WITH 履歴番号 IS NULL
CONNECT BY PRIOR ID = ID AND PRIOR 番号 = 履歴番号;
ありがとうございます。
同じようなSQL文は試したのですが・・エラーでした。
・start withではなくwithなのでしょうか?
・WHERE句で条件指定したい場合は、withおよびCONNECT BYはどこに入れるのでしょうか?
No.6
- 回答日時:
> NULLのとき始まりが「1」となっております。
> ・これ(今回でいうと変更回数)を「0」始まりにするには、どのように行えばよいでしょうか。
マイナス 1 すればよろしいかと。
ありがとうございます。
階層問い合わせはWHERE句の後に記述するのでしょうか?
以下で実行するとエラーがでてしまい変更回数をセットすることができません。
色々なサイトを調べましたが、うまくできません。
select level
from A
where *
start with A.履歴番号 is null
connect by prior A.番号 = A.履歴番号
No.5
- 回答日時:
>業務用途です。
select以外で行ってもいいのですが思い浮かびませんのでご教示ください。そのテーブルに変更回数の項目設けておいて、新しい履歴レコードinsertする際に、現在の変更回数に1を加えた値を設定すれば良いだけですが。
何か難しく考えすぎなのでは?
ありがとうございます。
なるほど理解しましたが、今回はテーブルに項目を追加せず出力の際に付与してやる形で行いたいと思います。
下記URLの階層手順でできそうですが、
http://codezine.jp/article/detail/2694
NULLのとき始まりが「1」となっております。
・これ(今回でいうと変更回数)を「0」始まりにするには、どのように行えばよいでしょうか。
・又今回コード毎にこのような階層条件を行いたいのですが、どのように行えばよいでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- スピーカー・コンポ・ステレオ レコードのマトリクス番号の見方を教えてください。 最近レコードの知識が少しずつ増え、最近マトリクス番 1 2022/08/14 13:58
- その他(セキュリティ) 電話番号を変えると一瞬で前の電話番号で登録した履歴は消えますか? 3 2022/06/21 15:21
- iPhone(アイフォーン) iPhoneの電話の履歴は、発信着信合わせて50件くらいしか残りませんが、もっとその前の過去の履歴は 1 2023/08/26 09:12
- 面接・履歴書・職務経歴書 履歴書の書き方について。 『 電話( ) - 』 と書かれている場合、どう記入すればいいですか?(父 1 2022/10/05 17:06
- iPhone(アイフォーン) LINEの引き継ぎ、違う端末での電話番号変更 2 2023/01/21 19:21
- アルバイト・パート アルバイトの面接をしたのですが、履歴書に電話番号を書く場所がなくて、面接の時履歴書をコピーしたのです 1 2023/05/29 21:04
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- SoftBank(ソフトバンク) iMessageについての質問です。 前のiPhoneから新しい機種に変更し、電話番号も契約者も変わ 1 2023/04/08 22:46
- 確定申告 税務調査について 6 2022/08/16 22:21
- 面接・履歴書・職務経歴書 高校生です先週アルバイトの面接に行ってきたのですがその時履歴書とはまた別に書かされる紙があったんです 3 2022/07/13 07:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORMについて
-
これをSQL文で出来るでしょうか?
-
AccessのSQL文で1件のみヒット...
-
SQL*Loader Append
-
アクセスのレポートでレコード...
-
【PL/SQL】FROM区に変数を使う方法
-
group byの並び順を変えるだけ...
-
【SQL】日付が最大のレコード群...
-
ANDとORの正確な理解が出来ませ...
-
Oracle9iデータベースの削除に...
-
一気に複数のレコードをinsert...
-
Oracle10gからkeySQLで集計データ
-
単一グループのグループ関数で...
-
SQL文の構築について教えてくだ...
-
引数によってwhere句を切り替え...
-
SQL文(重複データを省く)
-
1の行を固定した上でVBAを用い...
-
複数のテーブルから値を合計出...
-
2回実行のSQL文を1回にしたい
-
count関数の値をwhere句で使用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
AccessのSQL文で1件のみヒット...
-
アクセスのレポートでレコード...
-
where句中のtrim関数について
-
group byの並び順を変えるだけ...
-
引数によってwhere句を切り替え...
-
SQL*Loader Append
-
SQLで条件にヒットしたレコード...
-
updateで複数行更新したい
-
データ
-
トランザクションログを出力せ...
-
「数字で始まらない」ものを抽...
-
大量レコードをTRUNCATEせずに...
-
osqleditについて
-
BLOB型項目をSQLの検索条件に指...
-
これをSQL文で出来るでしょうか?
-
ACCESS レコードの並び順について
-
【SQL】違うフィールド同士の集...
おすすめ情報