前提・実現したいこと
SQLで仮に以下のようなデータがあったとして、
それをひとつの列にまとめて表示させたいです。
CREATEやINSERTで新しく作ったり
UPDATEなどで更新したりせずWHEREで絞込などで。
データ(テーブル名はdate_table)
id | name | address | age |
---|---|---|---|
1 | 佐藤 | 東京都 | 20 |
2 | 八王子市 | ||
3 | 南大沢 | ||
4 | 鈴木 | 大阪府 | 25 |
5 | 大阪市 | ||
6 | 南区 | ||
7 | 高橋 | 埼玉県 | 40 |
8 | 春日部市 | ||
9 | 小渕 | ||
### 理想の表示 | |||
id | name | address1 | address2 |
----- | ------------ | ------------- | -------------- |
1 | 佐藤 | 東京都 | 八王子市 |
2 | 鈴木 | 大阪府 | 大阪市 |
3 | 高橋 | 埼玉県 | 春日部市 |
試したこと
以下のSQL文を試したら上記表示になったのですが、これ以外の方法で(冗長になっても構わないので)上記表示させる方法はどういったものがありますか?
SQL
1SELECT 2 ROW_NOMBER()OVER(ORDER BY id) 3 id, 4 name, 5 address AS address1, 6 ( 7 SELECT address FROM date_table WHERE id = a.id + 1 8 ) AS address2, 9 ( 10 SELECT address FROM date_table WHERE id = a.id + 2 11 ) AS address3, 12 age 13FROM 14 date_table AS a 15WHERE 16 name IS NOT NULL 17;
テーブル定義はCREATE TABLEに、テーブルに設定されているデータはINSERTに修正してください。
どこかで見たやつですね。
https://teratail.com/questions/251257#reply-363197
SQLをシンプルにパフォーマンス良く実行できるように、データベースのテーブルはデータベースの正規化 https://oss-db.jp/measures/dojo_info_04.shtml に沿って設計します。通常第3正規化まで行います。
>どこかで見たやつですね。
愚か過ぎる手本。
> これ以外の方法で(冗長になっても構わないので)上記表示させる方法
質問のSQLは正規化されていないデータから問い合わせているので、データに合わせた抽出になっていますが、他の方法を求める理由は何ですか?
あなたの回答
tips
プレビュー