none
異なるテーブル構造のデータコピーをするクエリを教えてください RRS feed

  • 質問

  • テーブルA(コピー元)

    ID-A  品名   工程1   工程2  工程3

    1   カレー   あ     い    う

    2   ラーメン  い     あ

    3   おにぎり  う

    テーブルB(コピー先)

    ID-B  ID-A  工程順序   工程

    1    1    1      あ

    2    1    2      い

    3    1    3      う

    4    2    1      い

    5    2    2      あ

    6    3    1      う

    上記のようにテーブルAの工程情報を、サブテーブルとなるテーブルBにコピーしたいです。

    これまでテーブル構造を簡易化するために登録できる工程の上限を3つまでとしていましたが、

    使用者からの要望で3つ以上登録できるように変更したいと思います。

    テーブルAに登録してある過去の情報をテーブルBにコピーしたいのですが、追加クエリのSQLを教えてください。

    ①テーブルAの工程1~3をテーブルBの工程順序とする

    ②工程1~3がNullの場合はテーブルBにコピーしない

    ご教授の程宜しくお願いいたします。

    2020年8月26日 6:51

回答

  • 以下の感じでいいと思います。

    insert into dbo.テーブルB ([ID-A], 工程順序, 工程)
    select [ID-A], 1 seq, 工程1 from dbo.テーブルA where 工程1 is not null
    union
    select [ID-A], 2 seq, 工程2 from dbo.テーブルA where 工程2 is not null
    union
    select [ID-A], 3 seq, 工程3 from dbo.テーブルA where 工程3 is not null
    order by [ID-A], seq


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク HIRO_KU 2020年8月27日 2:37
    2020年8月26日 8:21

すべての返信

  • 以下の感じでいいと思います。

    insert into dbo.テーブルB ([ID-A], 工程順序, 工程)
    select [ID-A], 1 seq, 工程1 from dbo.テーブルA where 工程1 is not null
    union
    select [ID-A], 2 seq, 工程2 from dbo.テーブルA where 工程2 is not null
    union
    select [ID-A], 3 seq, 工程3 from dbo.テーブルA where 工程3 is not null
    order by [ID-A], seq


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク HIRO_KU 2020年8月27日 2:37
    2020年8月26日 8:21
  • trapemiya様

    いつもありがとうございます。

    unionクエリを使えば確かにこういったテーブルを作れますね。

    本当に勉強になります。

    これからもよろしくお願いします。

    2020年8月27日 2:39