2017-10-31 26 views
0

私は必要なテーブルが複数の行を持っており、それらをすべて新しいテーブルに入れることができます。SQLすべての行を1つの列に - 連結なし

すべての行を1行に変換する必要があります。

+-------+-----------+-------+--------+ 
| ID | Name | Last | Gender | 
+-------+-----------+-------+--------+ 
| 1 | Person1 | Last1 | M | 
| 2 | Person2 | Last2 | F | 
| 3 | Person3 | Last3 | M | 
| 4 | Person4 | Last4 | F | 
+-------+-----------+-------+--------+ 

私は以下に、上記の表を変換する必要があります。

+-------+------------+------------+ 
| NewID | ColumnName | Value | 
+-------+------------+------------+ 
|  1 | ID   | 1  | 
|  1 | Name  | Person1 | 
|  1 | Last  | Last1 | 
|  1 | Gender  | M  | 
|  2 | ID   | 2  | 
|  2 | Name  | Person2 | 
|  2 | Last  | Last2 | 
|  2 | Gender  | F  | 
|  3 | ID   | 3  | 
|  3 | Name  | Person3 | 
|  3 | Last  | Last3 | 
|  3 | Gender  | M  | 
|  4 | ID   | 4  | 
|  4 | Name  | Person4 | 
|  4 | Last  | Last4 | 
|  4 | Gender  | F  | 
|  |   |   | 
+-------+------------+------------+ 
+3

ご使用のデータベースで質問にタグを付けてください。 –

答えて

1

最も一般的な方法は、union allを使用することです:

select 'id' as columnname, cast(id as varchar(255)) as value from t union all 
select 'name', name as value from t union all 
select 'last', last as value from t union all 
select 'gender', gender as value from t; 

文字列へのキャストは異なる場合がありますが、これは、基本的に任意のデータベースをで動作するはずです。より効率的な他のソリューションを提供するデータベースもあります。

+0

これに感謝した皆様、ありがとうございます!私はちょっと待ってました。 –

1

連合幸せなソリューションを提供します。

select 'id' as columnname, id as value from table 
union all 
select 'name' as columnname, name as value from table 
union all 
.e 
.t 
.c 
関連する問題