-2

次のような列がたくさんあるテーブルがあります。

ID、名前1、名前2、名前3、タイトル1、タイトル2、タイトル3、メール1、メール2、メール3

1、ジョー・ブロー、ジェーン・ドウ、ジョン・ドウ、社長、秘書、用務員、no@no.com、yes@no.com、maybe@no.com

複数の行に分割し、これらの列ヘッダーを使用して新しいテーブルに挿入しようとしています:

ID、名前、役職、メール

*1 - ジョー・ブロー、社長、no@no.com

1 - ジェーン ドウ、秘書、yes@no.com

1 - John Doe、用務員、maybe@no.com*

これで私を助けることができる情報をオンラインで見つけることができません。このテーブルだけでも 4,000 を超えるエントリがあるため、手動でエントリすることは問題外です。

ID は、各企業で同じである必要があります。つまり、1 つの行はすべて 1 つの ID であり、次の行は別の ID です。

4

2 に答える 2

2

使用している SQL Server のバージョンは指定されていませんが、複数の列を複数の行に変換するこのプロセスは UNPIVOT と呼ばれます。SQL Server のデータを UNPIVOT する方法はいくつかあります。

SQL Server 2008 以降を使用している場合は、CROSS APPLY と VALUES 句を使用して、3 つのセットの列のピボットを解除できます。

select id, name, title, email
from yourtable
cross apply
(
  values
    (name1, title1, email1),
    (name2, title2, email2),
    (name3, title3, email3)
) c (name, title, email);

デモで SQL Fiddle を参照してください

SQL Server 2005 以降を使用している場合は、UNION ALL で CROSS APPLY を使用できます。

select id, name, title, email
from yourtable
cross apply
(
  select name1, title1, email1 union all
  select name2, title2, email2 union all
  select name3, title3, email3
) c (name, title, email);

デモで SQL Fiddle を参照してください

于 2013-09-27T11:28:26.513 に答える
0

労働組合に問題はありますか?

select ID, Name1, Title1, Email1
from table
union all
select ID, Name2, Title2, Email2
from table
union all
select ID, Name3, Title3, Email3
from table

すべての列は常に移入されていますか? where 句を使用して name3 にデータが入力されるようにし (name3 が null ではない)、新しいテーブルのすべての値が入力されるようにすることができます。

于 2013-09-27T00:09:23.197 に答える