アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようなテーブルがあります。

組織名/コード/備考
本社/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

質問者からの補足コメント

  • つらい・・・

    実際の組織階層はもっと複雑で、頻繁に行われるため、Oracle、PL/SQL、ストアドプロシージャで実現したく、SQLのエキスパートの方の知恵をお借りできると幸いです。

      補足日時:2016/04/21 05:52

A 回答 (4件)

>>頻繁に行われるため、Oracle、PL/SQL、ストアドプロシージャで実現したく



一番簡単なのは、エクセルシートで組織表(組織名、コード、備考、など)を管理し、エクセルvbaの中でSQLを発行し、自動でアップデートしてしまう。

どこでもやっている常套手段です。
    • good
    • 0

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になりやすい組織のコードを定期的に変更するって信じられない。組織階層系処理なら親組織のコードだけ持っていれば事足りるし。

寧ろ、ここの改善できれば質問者様の評価にも繋がると思うんですが。
    • good
    • 0

やればできるんでしょうけど...




そんなこと考えてるより、

Excelで一覧作って、
delete で一旦消して、
insert で一覧を挿入

とでもした方が早いし確実かと思います。



老婆心ながら。
データベースを有効に使いたいなら、こんなコードの持たせ方自体も考えなおすべきだし、
このような並び換えが頻繁に必要なら、運用方法を考えなおすべきでしょう。
    • good
    • 0
この回答へのお礼

連絡ありがとうございます。
組織が複雑で頻繁に行われるため、Oracle、PL/SQL、ストアドプロシージャで自動化を実現したいんです。
なんとか、SQLのエキスパートの方の知恵をお借りできると幸いです。

お礼日時:2016/04/21 05:55

えッ?普通にアップデートするしか無いと思いますが・・・。



UPDATE テーブル SET コード=000,備考=1 WHERE 組織名=本社


    • good
    • 0
この回答へのお礼

連絡ありがとうございます。
組織が複雑で頻繁に行われるため、Oracle、PL/SQL、ストアドプロシージャで自動化を実現したいんです。

お礼日時:2016/04/21 05:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す