0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLで行→列に変換!`kind`ごとの値を1行にまとめる方法【初心者向け】

Last updated at Posted at 2025-04-16

はじめに

こんにちは。
フルスタックエンジニア歴10年、Webアプリを中心に、IoTやAI開発にも携わっています。
要件定義などの上流工程から、実装・運用の下流工程まで幅広く対応し、
常に新しい技術を追求しながら、効率的で使いやすいソリューションの提供を目指しています。

本記事は、自作のAIエージェントフレームワーク PengentAI によって自動生成された技術ノートです。
実際の業務や学習の中で出てきた小さな疑問・課題を、AIと共に素早く解決し、ナレッジ化しています。


今回のテーマ:行→列に変換して1行にまとめたい!

SQLで、複数の行に分かれたデータを「列」にまとめて1行で扱いたいことってありませんか?

今回は、以下のようなテーブルデータを:

uid, kind, type
aaa, back, 1
bbb, side, 1
ccc, top,  1

このような形式に変換する方法をご紹介します:

back_uid, side_uid, top_uid, type
aaa      , bbb     , ccc    , 1

初心者でも実行できるように、MySQLを使ってステップごとに解説します!


ステップ1:テーブルとデータを用意する

まずはテスト用のテーブルとデータを作成しましょう。

DROP TABLE IF EXISTS test_table;

CREATE TABLE test_table (
  uid VARCHAR(10),
  kind VARCHAR(10),
  type INT
);

INSERT INTO test_table (uid, kind, type) VALUES
  ('aaa', 'back', 1),
  ('bbb', 'side', 1),
  ('ccc', 'top', 1);

ステップ2:行を列に変換するSQL

kind の値ごとに uid を列として取り出すために、CASE 文と MAX() 関数を組み合わせて使います。

SELECT
  MAX(CASE WHEN kind = 'back' THEN uid END) AS back_uid,
  MAX(CASE WHEN kind = 'side' THEN uid END) AS side_uid,
  MAX(CASE WHEN kind = 'top' THEN uid END) AS top_uid,
  type
FROM
  test_table
GROUP BY
  type;

なぜ MAX(CASE WHEN ...) を使うの?

  • CASE WHEN kind = '...' THEN uid で、条件に一致する値だけ取り出します。
  • そのままだと NULL を含む複数行が返ってしまうため、MAX() で1つに絞ります(kind ごとに1つの uid 前提)。
  • GROUP BY type で、type ごとに1レコードにまとめます。

応用:列の種類が増えたら?

kind の値が frontbottom など増えた場合でも、以下のように同じ形式で追加するだけです:

MAX(CASE WHEN kind = 'front' THEN uid END) AS front_uid,
MAX(CASE WHEN kind = 'bottom' THEN uid END) AS bottom_uid,

おわりに

このような「行→列」の変換は、BIツールや集計レポートなどでよく使われる基本的なテクニックです。
シンプルながら応用も効くので、ぜひ手元の環境で試してみてください!


この記事は、自作のAIエージェントフレームワーク PengentAI によって提案・構成され、自動で出力されたナレッジ記事です。

Qiitaの「いいね」やフォローも励みになります!
次回はさらに発展的なSQL Tipsや、AIを活用した自動化ノウハウも紹介していきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?