• ベストアンサー

こんなSQL文はありませんか?

環境:Access97 例えば以下のような社員名テーブルがあったします。 部署名|氏名 --------------- 経理部|田尾 --------------- 経理部|平野 --------------- 経理部|モッカ --------------- 営業 |谷沢 --------------- 総務部|大島 --------------- 総務部|上川 --------------- このテーブルを部署ごとにグループ分けして 以下のような形式で氏名を抽出したいのですが、 このようなことができるSQL文はありますでしょうか。 部署名|氏名1|氏名2|氏名3|・・|氏名n ---------------------------------------- 経理部|田尾 |平野 |モッカ ---------------------------------------- 営業 |谷沢 ---------------------------------------- 総務部|大島 |上川 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

この表を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;

masamisss
質問者

お礼

ありがとうございました。 クロス集計クエリーの良い勉強になりました。 Qry1のSQL、凝ってますね。

その他の回答 (5)

回答No.6

すいません。補足訂正です。 さっきの回答で、社員名テーブルという名前がついてるのを見落として、テーブルに勝手にTbl1という名前をつけました。クエリーではTbl1の部分を社員名テーブルに置き換えてください。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.4

はずしていたらすみません。 通常レベルのSELECT文(SQL文)では同じ属性を横に並べると言う事は無理でしょう。 ORDER BY でソートだけしておいて、あとはVBと連動させて編集処理するとかVBAを使うとかするしかないのではないでしょうか。

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.3

氏名項目数を動的に変化させるのはムリなので、何人まで、とキメ打ちならできるんじゃないですか? 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

masamisss
質問者

お礼

そう、黄金時代のドラゴンズです。 他には宇野とか中尾とか、、そうそう 田野倉なんて人もいましたよね。 同年代なのは間違い無いとして、 同郷ではないと思います。 名古屋人ではないのですが、何故かドラゴンズファン だった時代があったのです。

  • reinaman
  • ベストアンサー率50% (2/4)
回答No.2

すみません。 間違えました・・・ SELECT '経理部' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='経理部' UNION ALL SELECT '営業' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='営業' UNION ALL SELECT '総務部' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='総務部' です。 さっきのじゃあ、氏名が出ないです。 すみません

  • reinaman
  • ベストアンサー率50% (2/4)
回答No.1

こういうのはダメですか? SELECT '経理部' 氏名 FROM 社員名テーブル WHERE 部署名='経理部' UNION ALL SELECT '営業' 氏名 FROM 社員名テーブル WHERE 部署名='営業' UNION ALL SELECT '総務部' 氏名 FROM 社員名テーブル WHERE 部署名='総務部' ちなみに私の環境はDB2なのでもしかしたらAccess97とは違うかもしれませんが、多分これでいけるのでは・・・

関連するQ&A