質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

509閲覧

データを1行にまとめるSQL

behoimi80

総合スコア62

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/09/01 04:39

編集2021/09/01 04:51

DB:MySQL

sql文で悩んでます。
tempテーブルがあります。

keynameAnameB
1n11n111
1n12n122
1n13n133
2n21n211
2n22n222
3n31n311
4n41n411
4n42n422
5n51n511

sql文にて下記のような表を出力したい。
|key|nameA1|nameB1|nameA2|nameB2|nameA3|nameB3|
|:--|:--:|--:|
|1|n11|n111|n12|n122|n13|n133|
|2|n21|n211|n22|n222|||
|3|n31|n311|||||
|4|n41|n411|n42|n422|||
|5|n51|n511|||||

1.keyを1つに絞る
2.tempテーブルのnameA・nameBをnameA1・nameB1~nameA3・nameB3として
横にデータを表示する
3.keyにぶら下がっているnameA・nameBは最大3つまで。1つや2つの時もある。

このようなsql文は可能でしょうか?
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/09/01 04:48

DB サーバーは何ですか? SQL がどんな DB でも 100% 共通に使えるということはないのですけど。
behoimi80

2021/09/01 04:50

申し訳ございません。MySQLです。
退会済みユーザー

退会済みユーザー

2021/09/01 05:08 編集

対応ありがとうございました。MySQL でも pivot を使えるそうですのでそれを含めて検討されてはいかがでしょう。 https://style.potepan.com/articles/22844.html
guest

回答1

0

ベストアンサー

調整しました

SQL

1create table tbl(id int primary key,k int,nameA varchar(20),nameB varchar(20)); 2 3insert into tbl values 4(1,1,'n11','n111'), 5(2,1,'n12','n122'), 6(3,1,'n13','n133'), 7(4,2,'n21','n211'), 8(5,2,'n22','n222'), 9(6,3,'n31','n311'), 10(7,4,'n41','n411'), 11(8,4,'n42','n422'), 12(9,5,'n51','n511');

結果

SQL

1select k, 2max(case when rank=1 then nameA else null end) as na1, 3max(case when rank=1 then nameB else null end) as nb1, 4max(case when rank=2 then nameA else null end) as na2, 5max(case when rank=2 then nameB else null end) as nb2, 6max(case when rank=3 then nameA else null end) as na3, 7max(case when rank=3 then nameB else null end) as nb3 8from ( 9select *,(select count(*)+1 from tbl where id<t1.id and k=t1.k) as rank 10from tbl as t1) as t2 11group by k

投稿2021/09/01 05:14

編集2021/09/01 05:32
yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問