1

私はこのようなテーブルを持っています:

create table t1 {
  person_id int,
  item_name varchar(30),
  item_value varchar(100)
};

person_id + item_nameが複合キーであるとすると、次のようにテーブルt1にいくつかのデータ(5レコード)があります。

person_id ====item_name ====== item_value
   1          'NAME'           'john'
   1          'GENDER'         'M'
   1          'DOB'            '1970/02/01'
   1          'M_PHONE'        '1234567890'
   1          'ADDRESS'        'Some Addresses unknown'

ここで、SQL(またはストアドプロシージャ/関数の組み合わせなど)を使用して、上記の結果(1つの結果セット)をクエリすると、次のようになります。

NAME==GENDER==DOB========M_PHONE=======ADDRESS===============
1     M       1970/02/01 1234567890    Some Addresses unknown

どうすればいいですか?ご協力ありがとうございました。

4

2 に答える 2

1

使用しているデータベースに関係なく、達成しようとしていることの概念は「ピボットテーブル」と呼ばれます。

mysqlの例を次に示します。http: //en.wikibooks.org/wiki/MySQL/Pivot_table

一部のデータベースにはそのための機能が組み込まれています。以下のリンクを参照してください。

SQLServer: http: //msdn.microsoft.com/de-de/library/ms177410.aspx

Oracle: http ://www.dba-oracle.com/t_pivot_examples.htm

いつでも手動でピボットを作成できます。結果セット内のすべての集計を選択してから、その結果セットから選択するだけです。あなたの場合、person_idに関連する名前の数がわからないため、concat(mysqlのgroup_concatだと思います)を使用してすべての名前を1つの列に入れることができます。

于 2012-02-06T09:01:31.447 に答える
0

最後に、PostgreSQLで解決策を見つけました。

select * from crosstab ('select person_id,  item_name, item_value from t1 where person_id = 1 ') 
as virtual_table ( person_id integer, name varchar, gender varchar, dob varchar, m_phone varchar, address varchar)

また、Postgresにクロス集計機能をインストールする必要があります。詳細:http ://www.postgresql.org/docs/8.3/static/tablefunc.html

于 2012-02-07T01:44:39.583 に答える