以下のようなテーブルがあります。
組織名/コード/備考
本社/000/
経理部/000000/
経理担当/000000000/
人事総務部/000001/
人事総務担当/000001000/
マーケティング部/000002/
マーケティング担当/000002000/
システムソリューション事業部/001/
第一ソリューション部/001000/
企画担当/001000000/
営業担当/001000001/
開発担当/001000002/
第二ソリューション部/001001/
企画担当/001001000/
営業担当/001001001/
開発担当/001001002/
上記テーブルの「コード」は、3桁で階層を表すものとなります。
以下のような組織構造となります。
本社-経理部-経理担当
システムソリューション事業部-第一ソリューション部-企画担当
システムソリューション事業部-第一ソリューション部-営業担当
システムソリューション事業部-第一ソリューション部-開発担当
上記テーブルの「備考」欄に、「順番」を与えることによって、順番によって、「コード」を振り直したい場合、どのようにSQLを記載したらよいでしょうか?
組織階層の親子関係は、そのまま保持したく、以下のように、「順番を指定」した結果が、「SQL実行結果」になる必要があります。
<順番を指定>
組織名/コード/備考
本社/000/1
経理部/000000/11
経理担当/000000000/12
人事総務部/000001/2
人事総務担当/000001000/3
マーケティング部/000002/9
マーケティング担当/000002000/10
システムソリューション事業部/001/4
第一ソリューション部/001000/5
企画担当/001000000/8
営業担当/001000001/6
開発担当/001000002/7
第二ソリューション部/001001/13
企画担当/001001000/16
営業担当/001001001/15
開発担当/001001002/14
<SQL実行結果>
組織名/コード/備考
本社/000/1
人事総務部/000000/2
人事総務担当/000000000/3
マーケティング部/000001/9
マーケティング担当/000001000/10
経理部/000002/11
経理担当/000002000/12
システムソリューション事業部/001/4
第一ソリューション部/001000/5
営業担当/001000000/6
開発担当/001000001/7
企画担当/001000002/8
第二ソリューション部/001001/13
開発担当/001001000/14
営業担当/001001001/15
企画担当/001001002/16
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>>頻繁に行われるため、Oracle、PL/SQL、ストアドプロシージャで実現したく
一番簡単なのは、エクセルシートで組織表(組織名、コード、備考、など)を管理し、エクセルvbaの中でSQLを発行し、自動でアップデートしてしまう。
どこでもやっている常套手段です。
No.3
- 回答日時:
No2様に禿同。
もしSQL関係だけで定期的な処理をするなら、こんな感じでしょうか。
1.新コード用のテーブルを作る。
2.そのテーブルに組織名と新コードを入れる。
3.名寄せでUPDATEするSQL文を実行する。
1.下のような新コード用のテーブルを作る。
テーブル名:t_新コード
フィールド名:f_組織名
フィールド名:f_新コード
2.そのテーブルに組織名と新コードを入れる。こんな感じ。
組織名/コード
本社/000
人事総務部/000000
人事総務担当/000000000
マーケティング部/000001
マーケティング担当/000001000
...
3.下のような「組織名を名寄せでUPDATEするSQL文」を実行する。
UPDATE t_組織構造 SET t_組織構造.コード=(SELECT t_新コード.f_新コード FROM t_新コード WHERE t_組織構造.組織名=t_新コード.f_組織名) WHERE t_組織構造.組織名=t_新コード.f_組織名;
自論ですがコード類に意味を持たせても経験上ロクなことは無い。PKやFKになりやすい組織のコードを定期的に変更するって信じられない。組織階層系処理なら親組織のコードだけ持っていれば事足りるし。
寧ろ、ここの改善できれば質問者様の評価にも繋がると思うんですが。
No.2
- 回答日時:
やればできるんでしょうけど...
そんなこと考えてるより、
Excelで一覧作って、
delete で一旦消して、
insert で一覧を挿入
とでもした方が早いし確実かと思います。
老婆心ながら。
データベースを有効に使いたいなら、こんなコードの持たせ方自体も考えなおすべきだし、
このような並び換えが頻繁に必要なら、運用方法を考えなおすべきでしょう。
連絡ありがとうございます。
組織が複雑で頻繁に行われるため、Oracle、PL/SQL、ストアドプロシージャで自動化を実現したいんです。
なんとか、SQLのエキスパートの方の知恵をお借りできると幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- 営業・販売・サービス 営業職から営業事務への配置転換を言われてとても複雑な気分です。 アドバイスお願いします。 営業担当を 3 2023/06/20 20:10
- 分譲マンション 分譲マンションの初の管理組合の困った点について精神的に来ています。 3 2022/08/05 07:03
- 分譲マンション マンション管理業務の不履行・責任回避の大手ブランドという巨人と一住民の関係性 5 2022/06/20 12:21
- 片思い・告白 派遣の営業担当に一目ぼれしてますが… 1 2022/11/30 11:15
- 会社・職場 一人でバックオフィスを担当している状態がしんどいです 1 2022/06/09 22:07
- 事務・総務 求人についてお聞きしたいです。 6 2022/05/04 18:24
- 企画・マーケティング ネットリサーチ会社について 1 2022/04/04 18:13
- 財務・会計・経理 法務・経理で必要な知識の学び方 質問です。 本社がある企業の事業所で 今年夏から事務で働いています。 3 2022/12/12 13:02
- 財務・会計・経理 代理店企画業です。 イベント終了 ↓ 外注した業社から請求書を郵送いただく ↓ もらったら社内の営業 1 2022/06/13 12:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
続.ORACLEのSELECTのソートに...
-
SQL 2つのテーブルとSUBSTRING...
-
2つのテーブルから条件に一致...
-
行方向のデータを横に並べる
-
重複するキーから一番古い年月...
-
主キーの変更
-
ACCESSのコンパイルエラーについて
-
Accessユニオンクエリーで2つ...
-
UNION ALL
-
ACCESS 一つのフィールドに複...
-
片方だけ抽出する方法(SQL)
-
Access2002 2つのテーブルのマ...
-
レコードの一致方法
-
accessで移動平均する方法
-
Inner join と Left joinの明...
-
アクセスで重複データが消えて...
-
Accessでフィールドを比較した...
-
オラクルではできるのにSQLSERV...
-
データの二重表示の原因
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
行方向のデータを横に並べる
-
PLSQLの識別子エラー
-
VIEWでテーブルの集計結果...
-
Accessでフィールドを比較した...
-
Accessユニオンクエリーで2つ...
-
主キーの変更
-
ACCESSのコンパイルエラーについて
-
片方だけ抽出する方法(SQL)
-
【Access】順位を付けたい
-
[Oracle] UPDATE分の副問い合わ...
-
テーブル値関数経由でのデータ更新
-
ACCESS インポート時の重複チ...
-
ACCESS2000でDCount関数の使い方
-
Access2002の集計レポート?
-
商品コード番号を入力すると商...
-
Inner join と Left joinの明...
おすすめ情報
実際の組織階層はもっと複雑で、頻繁に行われるため、Oracle、PL/SQL、ストアドプロシージャで実現したく、SQLのエキスパートの方の知恵をお借りできると幸いです。