- PR -

ビュー作成

1
投稿者投稿内容
まろ茶
会議室デビュー日: 2004/07/28
投稿数: 17
投稿日時: 2005-12-21 11:48
いつもお世話になります。

テーブルに格納されているロウのデータをビューでカラムとして
表示できないか悩んでいます。
例えば

テーブル
FieldName | FieldValue
-------------------------
氏名     A
住所     B
電話番号   C

これを

ビュー
氏名 | 住所 | 電話番号
------------------------
A   B   C

と表示したいのです。

ご存知の方いらっしゃいましたら
ご教授お願いできますでしょうか?
宜しくお願いします。


[ メッセージ編集済み 編集者: まろ茶 編集日時 2005-12-21 11:49 ]
jk
ベテラン
会議室デビュー日: 2005/08/19
投稿数: 94
投稿日時: 2005-12-21 12:17
こんにちは

少し強引ですが、サブクエリを使えば出来ますね。
mysql5.0では動作確認できました。他はわかりません。

こんなテーブルで
コード:
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| id         | char(10) | YES  |     | NULL    |       |
| FieldName  | char(20) | YES  |     | NULL    |       |
| FieldValue | char(20) | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+



こんなデータが入っていたとします。
コード:
+-------+-----------+---------------+
| id    | FieldName | FieldValue    |
+-------+-----------+---------------+
| 00001 | 氏名      | test-name     |
| 00001 | 住所      | test-address  |
| 00001 | 電話番号  | test-telno    |
| 00002 | 氏名      | test-name2    |
| 00002 | 住所      | test-address2 |
| 00002 | 電話番号  | test-telno2   |
+-------+-----------+---------------+



でこんなsqlでビューを作成。
コード:
create view view_test as
select distinct t1.id,
(select FieldValue from test t2 where t2.id=t1.id and t2.FieldName='氏名') as 氏名,
(select FieldValue from test t3 where t3.id=t1.id and t3.FieldName='住所') as 住所,
(select FieldValue from test t4 where t4.id=t1.id and t4.FieldName='電話番号') as '電話番号'
from test t1;



こんなんで、いかがでしょうか?
テーブルに1件分のデータしか無いことが補償されるならば、idのフィールドは必要ないです。
まろ茶
会議室デビュー日: 2004/07/28
投稿数: 17
投稿日時: 2005-12-21 13:39
早速の返信ありがとうございました。

教えていただいた方法で無事解決できました。
ありがとうございました!!
とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2005-12-22 22:36
CASE式が使えるなら、こんな方法も有ります。
コード:
create view view_test as

select id
, MAX(case FieldName when '氏名' then FieldValue end) as 氏名
, MAX(case FieldName when '住所' then FieldValue end) as 住所
, MAX(case FieldName when '電話番号' then FieldValue end) as 電話番号
from test
group by
id;



[ メッセージ編集済み 編集者: とんくま 編集日時 2005-12-22 22:37 ]
1

スキルアップ/キャリアアップ(JOB@IT)