プロが教えるわが家の防犯対策術!

環境:Access97

例えば以下のような社員名テーブルがあったします。

部署名|氏名
---------------
経理部|田尾
---------------
経理部|平野
---------------
経理部|モッカ
---------------
営業 |谷沢
---------------
総務部|大島
---------------
総務部|上川
---------------

このテーブルを部署ごとにグループ分けして
以下のような形式で氏名を抽出したいのですが、
このようなことができるSQL文はありますでしょうか。


部署名|氏名1|氏名2|氏名3|・・|氏名n
----------------------------------------
経理部|田尾 |平野 |モッカ
----------------------------------------
営業 |谷沢
----------------------------------------
総務部|大島 |上川

宜しくお願いいたします。

A 回答 (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;
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/04 14:34

すいません。

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

はずしていたらすみません。



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

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



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
    • good
    • 0
この回答へのお礼

そう、黄金時代のドラゴンズです。
他には宇野とか中尾とか、、そうそう
田野倉なんて人もいましたよね。

同年代なのは間違い無いとして、
同郷ではないと思います。
名古屋人ではないのですが、何故かドラゴンズファン
だった時代があったのです。

お礼日時:2002/02/04 14:37

すみません。


間違えました・・・


SELECT '経理部' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='経理部'
UNION ALL
SELECT '営業' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='営業'
UNION ALL
SELECT '総務部' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='総務部'

です。
さっきのじゃあ、氏名が出ないです。
すみません
    • good
    • 0

こういうのはダメですか?



SELECT '経理部' 氏名 FROM 社員名テーブル WHERE 部署名='経理部'
UNION ALL
SELECT '営業' 氏名 FROM 社員名テーブル WHERE 部署名='営業'
UNION ALL
SELECT '総務部' 氏名 FROM 社員名テーブル WHERE 部署名='総務部'

ちなみに私の環境はDB2なのでもしかしたらAccess97とは違うかもしれませんが、多分これでいけるのでは・・・
    • good
    • 0

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

関連するカテゴリからQ&Aを探す