[pgsql-jp: 30905] レコード内容から列名を取得・生成?するSQL
kenbooit @ excite.co.jp
kenbooit @ excite.co.jp
2003年 9月 2日 (火) 14:12:19 JST
島田と申します。
SQLもしくはエクセル!?の質問になってしまうかもしれないのですが、
もしよろしければご教授ください。
まず下のような3つのテーブルがあります。
(master)
id | name
--------------
m1 | A
m2 | B
m3 | C
(fk_table)
id | fk_master | number | text | fk_location
------------------------------------------------------
1 | m1 | 1 | tanaka1 | y1
2 | m1 | 2 | tanaka2 | y2
3 | m1 | 3 | tanaka3 | y3
4 | m2 | 1 | yama1 | y4
5 | m2 | 2 | yama2 | y5
6 | m2 | 3 | yama3 | y6
7 | m3 | 1 | ito1 | y7
8 | m3 | 2 | ito2 | y8
9 | m3 | 3 | ito3 | y9
(location)
id | yuubin
----------------
y1 | 111-1111
y2 | 222-2222
y3 | 333-3333
y4 | 444-4444
y5 | 555-5555
y6 | 666-6666
y7 | 777-7777
y8 | 888-8888
y9 | 999-9999
下のSQLを実行すると
SELECT m.name, f.number, l.yuubin, f.text
FROM master m, fk_table f, location l
WHERE m.id = f.fk_master
AND l.id = f.fk_localtion
ORDER BY f.text, f.number
下のような結果が返ってくるのですが
name | number | yuubin | text
------+--------+----------+---------
A | 1 | 111-1111 | tanaka1
A | 2 | 222-2222 | tanaka2
A | 3 | 333-3333 | tanaka3
B | 1 | 444-4444 | yama1
B | 2 | 555-5555 | yama2
B | 3 | 666-6666 | yama3
C | 1 | 777-7777 | ito1
C | 2 | 888-8888 | ito2
C | 3 | 999-9999 | ito3
最終的には下のようなデータ形式を要求されています。
name | yuubin1 |
text1 | yuubin2 | text2 | yuubin3 | text3
-----------------------------------------------------------------------------------
A | 111-1111 |
tanaka1 | 222-2222| tanaka2 | 333-3333| tanaka3
B | 444-4444 |
yama1 | 555-5555| yama2 | 666-6666| yama3
C | 777-7777 |
ito1 | 888-8888| ito2 | 999-9999| ito3
これはSQLでは難しいでしょうか。
レコード数が1万件ぐらいあるので、
できれば、エクセルでどうこうするっていうのは避けたいのですが・・・。
(エクセルで簡単にできる方法があれば、それはそれでいいのですが、それも思いついていないのが現状です)
以上、よろしくお願い致します。
pgsql-jp メーリングリストの案内