OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.209838
  • 閲覧数555
  • ありがとう数4
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 26% (60/226)

環境:Access97

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

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

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


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

宜しくお願いいたします。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.5
レベル9

ベストアンサー率 50% (37/73)

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

お礼率 26% (60/226)

ありがとうございました。
クロス集計クエリーの良い勉強になりました。
Qry1のSQL、凝ってますね。
投稿日時 - 2002-02-04 14:34:18
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル7

ベストアンサー率 50% (2/4)

こういうのはダメですか? SELECT '経理部' 氏名 FROM 社員名テーブル WHERE 部署名='経理部' UNION ALL SELECT '営業' 氏名 FROM 社員名テーブル WHERE 部署名='営業' UNION ALL SELECT '総務部' 氏名 FROM 社員名テー ...続きを読む
こういうのはダメですか?

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

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


  • 回答No.2
レベル7

ベストアンサー率 50% (2/4)

すみません。 間違えました・・・ SELECT '経理部' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='経理部' UNION ALL SELECT '営業' 部署名, 氏名 FROM 社員名テーブル WHERE 部署名='営業' UNION ALL SELECT '総務部� ...続きを読む
すみません。
間違えました・・・


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

です。
さっきのじゃあ、氏名が出ないです。
すみません
  • 回答No.3
レベル12

ベストアンサー率 41% (245/593)

氏名項目数を動的に変化させるのはムリなので、何人まで、とキメ打ちならできるんじゃないですか? SELECT DISTINCT e1.部署名, e1.氏名 AS 氏名1, e2.氏名 AS 氏名2, e3.氏名 AS 氏名3 FROM (SELECT 部署名,MAX(氏名) FROM 社員テーブル GROUP BY 部署名) e1, (SELECT * FROM 社員テー ...続きを読む
氏名項目数を動的に変化させるのはムリなので、何人まで、とキメ打ちならできるんじゃないですか?

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

お礼率 26% (60/226)

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

同年代なのは間違い無いとして、
同郷ではないと思います。
名古屋人ではないのですが、何故かドラゴンズファン
だった時代があったのです。
投稿日時 - 2002-02-04 14:37:38
  • 回答No.4
レベル14

ベストアンサー率 30% (2593/8599)

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

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

ベストアンサー率 50% (37/73)

すいません。補足訂正です。 さっきの回答で、社員名テーブルという名前がついてるのを見落として、テーブルに勝手にTbl1という名前をつけました。クエリーではTbl1の部分を社員名テーブルに置き換えてください。
すいません。補足訂正です。
さっきの回答で、社員名テーブルという名前がついてるのを見落として、テーブルに勝手にTbl1という名前をつけました。クエリーではTbl1の部分を社員名テーブルに置き換えてください。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ