プロが教える店舗&オフィスのセキュリティ対策術

MySQL4.0.17

次の(1)(2)のようなマスターとテーブルを、社員IDをキーに結合し、
(3)のように1行=1社員のフォーマットで出力するSQL文を教えてください。
(3)のようにするには、(2)を(社員ID別に)行と列を入れ替えなければなりませんよね?

SELECT
社員ID.社員マスター,
名前.社員マスター,
性別.社員マスター,
社員ID.出席テーブル
??ここに何か挿入???
FROM 社員マスター, 出席テーブル
WHERE
社員ID.社員マスター = 社員ID.出席テーブル


(1) 社員マスター
-----------------
社員ID 名前 性別
-----------------
1     鈴木  1
2     佐藤  1
3     山本  2
-----------------

(2) 出席テーブル
----------------------
社員ID 年月  出席日数
----------------------
1   200601    3
1   200602    4
1   200603    5
2   200601    10
2   200602    11
2   200603    12
3   200601    7
3   200602    8
3   200603    9
----------------------

出力したいフォーマット
---------------------------------------------------------------
名前ID 名前 性別 出席日数200601 出席日数200602 出席日数200603
---------------------------------------------------------------
1    鈴木  1    3         4          5
2    佐藤  1   10         11         12
3    山本  2    7         8          9
---------------------------------------------------------------

よろしくお願い致します。

A 回答 (1件)

SELECT


`社員マスター`.`社員ID` AS `名前ID`
,`社員マスター`.`名前` AS `名前`
,`社員マスター`.`性別` AS `性別`
,`出席日数200601`.`出席日数` AS `出席日数200601`
,`出席日数200602`.`出席日数` AS `出席日数200602`
,`出席日数200603`.`出席日数` AS `出席日数200603`
FROM `社員マスター`
LEFT JOIN `出席テーブル` AS `出席日数200601` ON `社員マスター`.`社員ID` = `出席日数200601`.`社員ID` AND `出席日数200601`.`年月` = '200601'
LEFT JOIN `出席テーブル` AS `出席日数200602` ON `社員マスター`.`社員ID` = `出席日数200602`.`社員ID` AND `出席日数200602`.`年月` = '200602'
LEFT JOIN `出席テーブル` AS `出席日数200603` ON `社員マスター`.`社員ID` = `出席日数200603`.`社員ID` AND `出席日数200603`.`年月` = '200603'

これでいけるとおもいます。
    • good
    • 0
この回答へのお礼

saintandreさん、早速ありがとうございました。

本番環境のフィールド名などに置換しただけで完璧に動きました。
※元質問のSQL文は「フィールド名.テーブル名」でなく「テーブル名.フィールド名」でしたね(^_^;

SQL文は『基礎SQL』という入門書で勉強したんですが、LEFT JOINだけはよくわからなくて
あやふやにしてました。これで解決できるわけですね、大変勉強になりました。

今まで、それぞれのテーブル別にCSVでエキスポートして、全てのテーブルを
Excel(VLOOKUP関数)などで結合してたのですが、これからラクできそうです。
本当にありがとうございました。

お礼日時:2006/04/11 15:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!