1

これが可能かどうかはわかりません。私はTable1次のフィールドを持っています。

No

A
B
C
D

列名をtable1の行名にしますtable2's(それぞれvarchar(20)、すべてnull)

A B C D

table1に行を追加すると、table2列も追加されるはずです。

助言がありますか。

4

3 に答える 3

1

ここに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;

お役に立てば幸いです。

于 2012-10-12T23:04:15.603 に答える
1

あなたが何をしようとしているのかは明確ではありません。ただし、これらの行のデータのみをの行にしたい場合は、次の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を参照してください

于 2012-10-12T23:22:34.200 に答える
0

これはクエリだけでは不可能です。これを実現するには、サーバー側の言語で作業する必要があります。

于 2012-10-12T22:40:09.013 に答える