- ベストアンサー
こんなSQL文はありませんか?
環境:Access97 例えば以下のような社員名テーブルがあったします。 部署名|氏名 --------------- 経理部|田尾 --------------- 経理部|平野 --------------- 経理部|モッカ --------------- 営業 |谷沢 --------------- 総務部|大島 --------------- 総務部|上川 --------------- このテーブルを部署ごとにグループ分けして 以下のような形式で氏名を抽出したいのですが、 このようなことができるSQL文はありますでしょうか。 部署名|氏名1|氏名2|氏名3|・・|氏名n ---------------------------------------- 経理部|田尾 |平野 |モッカ ---------------------------------------- 営業 |谷沢 ---------------------------------------- 総務部|大島 |上川 宜しくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
この表をTbl1という名前とします。 まず、以下のクエリーをQry1とします。 SELECT T.部署名, T.氏名, Count(T.氏名) AS [No] FROM Tbl1 AS T, Tbl1 AS S WHERE T.部署名=S.部署名 And T.氏名>=S.氏名 GROUP BY T.部署名, T.氏名; 次に、先ほどのQry1を使った以下のクエリーでできると思います。 TRANSFORM First(Qry1.氏名) AS xx SELECT Qry1.部署名 FROM Qry1 GROUP BY Qry1.部署名 PIVOT "氏名" & Qry1.No;
その他の回答 (5)
- gonta_goma
- ベストアンサー率50% (37/73)
すいません。補足訂正です。 さっきの回答で、社員名テーブルという名前がついてるのを見落として、テーブルに勝手にTbl1という名前をつけました。クエリーではTbl1の部分を社員名テーブルに置き換えてください。
- ymmasayan
- ベストアンサー率30% (2593/8599)
はずしていたらすみません。 通常レベルのSELECT文(SQL文)では同じ属性を横に並べると言う事は無理でしょう。 ORDER BY でソートだけしておいて、あとはVBと連動させて編集処理するとかVBAを使うとかするしかないのではないでしょうか。
- Mizyu
- ベストアンサー率41% (245/593)
氏名項目数を動的に変化させるのはムリなので、何人まで、とキメ打ちならできるんじゃないですか? SELECT DISTINCT e1.部署名, e1.氏名 AS 氏名1, e2.氏名 AS 氏名2, e3.氏名 AS 氏名3 FROM (SELECT 部署名,MAX(氏名) FROM 社員テーブル GROUP BY 部署名) e1, (SELECT * FROM 社員テーブル ORDER BY 氏名) e2, (SELECT * FROM 社員テーブル ORDER BY 氏名) e3 WHERE e1.部署名 = e2.部署名 AND e1.部署名 = e3.部署名 AND e1.氏名 > e2.氏名 AND e2.氏名 > e3.氏名 (テスト未なので自信ないです。) こんな感じで。 パフォーマンスは完全無視です(^^; あと、自分はAccsess触ったことないです。 Oracle、ポスグレ、SQLサーバとかいろいろ触ってはいますがAccsessは無いです・・・。すいません。 これの応用でなんとかなりませんかね? あと、社員の氏名、黄金時代のドラゴンズですね。 同年代、同郷の方と見て間違いないでしょう。(w
お礼
そう、黄金時代のドラゴンズです。 他には宇野とか中尾とか、、そうそう 田野倉なんて人もいましたよね。 同年代なのは間違い無いとして、 同郷ではないと思います。 名古屋人ではないのですが、何故かドラゴンズファン だった時代があったのです。
- reinaman
- ベストアンサー率50% (2/4)
すみません。 間違えました・・・ SELECT '経理部' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='経理部' UNION ALL SELECT '営業' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='営業' UNION ALL SELECT '総務部' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='総務部' です。 さっきのじゃあ、氏名が出ないです。 すみません
- reinaman
- ベストアンサー率50% (2/4)
こういうのはダメですか? SELECT '経理部' 氏名 FROM 社員名テーブル WHERE 部署名='経理部' UNION ALL SELECT '営業' 氏名 FROM 社員名テーブル WHERE 部署名='営業' UNION ALL SELECT '総務部' 氏名 FROM 社員名テーブル WHERE 部署名='総務部' ちなみに私の環境はDB2なのでもしかしたらAccess97とは違うかもしれませんが、多分これでいけるのでは・・・
お礼
ありがとうございました。 クロス集計クエリーの良い勉強になりました。 Qry1のSQL、凝ってますね。