• ベストアンサー

複数行のデータを1行にしたい

添付画像のようなデータがあります。 これを部署単位でデータをまとめたいです。 お知恵を拝借出来れば幸いです。 所属者の最小数は1で最大数は81名でした。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>出来ましたらテーブルを分割せずに求められた方がありがたいです。 正規化ってわかります? このまま運用したら早晩破綻すると思いますよ どうしてもというならこんな感じで //準備 create table person (部署名 varchar(30),部署ID int,社員ID int,社員名 varchar(30)); insert into person values('営業部',1,123,'太郎'),('営業部',1,223,'花子'),('経理部',2,256,'二郎'),('経理部',2,289,'一郎'),('庶務部',3,127,'景子'),('庶務部',3,40,'里見'),('庶務部',3,20,'三郎'); //表示 select 部署名,部署ID,社員ID,社員名 AS 所属者 from person //集計 select 部署名,部署ID,group_concat(cast(社員ID as char(20)) order by 社員ID) as 社員ID,group_concat(社員名 order by 社員ID) AS 所属者 from person group by 部署ID order by 部署ID

orion-ok
質問者

お礼

ありがとうございます。 おかげさまで無事解決できました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな風でどうでしょう? //準備 create table section(部署ID int,部署名 varchar(30)); insert into section values(1,'営業部'),(2,'経理部'),(3,'庶務部'); create table person (社員ID int,社員名 varchar(30),部署ID int); insert into person values(123,'太郎',1),(223,'花子',1),(256,'二郎',2),(289,'一郎',2),(127,'景子',3),(40,'里見',3),(20,'三郎',3); //表示 select 部署名,s.部署ID,社員ID,社員名 AS 所属者 from section as s inner join person as p on s.部署ID=p.部署ID //集計 select 部署名,s.部署ID,group_concat(cast(社員ID as char(20)) order by 社員ID) as 社員ID,group_concat(社員名 order by 社員ID) AS 所属者 from section as s inner join person as p on s.部署ID=p.部署ID group by 部署ID order by 部署ID

orion-ok
質問者

補足

ご回答頂きありがとうございます。 データに関してですが部署が700件社員数が4000件あります。 出来ましたらテーブルを分割せずに求められた方がありがたいです。

すると、全ての回答が全文表示されます。

関連するQ&A