これが可能かどうかはわかりません。私はTable1次のフィールドを持っています。
No
A
B
C
D
列名をtable1の行名にしますtable2's(それぞれvarchar(20)、すべてnull)
A B C D
table1に行を追加すると、table2列も追加されるはずです。
助言がありますか。
ここにT-SQL(SQL Server)のいくつかの疑似ソリューションに関する情報があり、そのうちのいくつかはMySQLに転送できる可能性があります:http ://sqlserveradvisor.blogspot.co.uk/2009/03/sql-server-convert-rows -to-columns.html ただし、簡単な方法はありません。
(これもT-SQLで)思いつくことができる最高のものは、この動的SQLソリューションです。
declare @tempTable table (ColumnName nvarchar(10))
declare @sql nvarchar(max)
insert @tempTable
select 'Col1'
union select 'Col2'
union select 'Col3'
select @sql = isnull(@sql+ ',','') + '1 ' + quotename(ColumnName)
from @tempTable
set @sql = 'select ' + @sql
exec(@sql)
- 編集 -
MySQLでスクリプトを試すことができました(ここのオンラインホストを介して:http://headfirstlabs.com/sql_hands_on/hf01.htm)。以下のコードは、そこにあるデモデータベースで機能するため、テーブルで機能するはずです。少し混乱したので、列に列番号のデータを含めることで少し複雑にしましたが、うまくいけばすべて役立つので、今はそのままにしておきます。
set @test:='select';
set @i:=1;
select @test:=concat(@test, ' ',case when @i>1 then ',' else '' end, ' ''Col', @i, ''' as ', last_name) , @i:=@i+1 from my_contacts;
select @test;
PREPARE stmt1 FROM @test;
execute stmt1;
(簡略化されたMySQLバージョン)
set @sql:='select';
select @sql:=concat(@sql, case when @sql>'select' then ', ' else ' ' end, '0 as ', last_name) from my_contacts;
select @sql;
PREPARE stmt1 FROM @sql;
execute stmt1;
お役に立てば幸いです。
あなたが何をしようとしているのかは明確ではありません。ただし、これらの行のデータのみをの行にしたい場合は、次のSELECTようにすることができます。
select
max(case when no = 'A' then col end) as A,
max(case when no = 'B' then col end) as B,
max(case when no = 'C' then col end) as C,
max(case when no = 'D' then col end) as D
from table1
SQL FiddleWithDemoを参照してください
反対の方法で列を行に変換する場合は、:を使用しますUNION ALL。
select col1 No
from table1
union all
select col2 No
from table1
union all
select col3 No
from table1
union all
select col4 No
from table1
SQL FiddleWithDemoを参照してください
これはクエリだけでは不可能です。これを実現するには、サーバー側の言語で作業する必要があります。