こういうビューを抽出するSQLを書きたいのですが、わからず困っています。
TableA (主キー:ID)
ID│CodeA
──┼─────
0001│123
0002│234
:│:
TableB (主キー:ID)
ID│CodeA │CodeB │Name
──┼───┼───┼───
1│123 │A1 │XXX
2│123 │B1 │YYY
3│123 │C1 │ZZZ
欲しい抽出結果 (CodeBとNameは1行に最大5回まで存在しうる)
ID│CodeA │CodeB1│Name1 │CodeB2│Name2 │CodeB3│Name3
──┼───┼───┼───┼───┼───┼───┼───
0001│123 │A1 │XXX │B1 │YYY │C1 │ZZZ
こういうのってSELECT文だけで記述できるのでしょうか?
どのように記述すれば良いでしょうか?
No.1ベストアンサー
- 回答日時:
「CodeBとNameは1行に最大5回まで存在しうる」ので常に5セット(CodeB5,Name5まで)返していいということですよね。
SQL Server 2005以降であれば、以下のような書き方ができます。
SELECT
ID,
CodeA,
MAX(CASE WHEN Seq=1 THEN CodeB END) CodeB1,
MAX(CASE WHEN Seq=1 THEN Name END) Name1,
MAX(CASE WHEN Seq=2 THEN CodeB END) CodeB2,
MAX(CASE WHEN Seq=2 THEN Name END) Name2,
MAX(CASE WHEN Seq=3 THEN CodeB END) CodeB3,
MAX(CASE WHEN Seq=3 THEN Name END) Name3,
MAX(CASE WHEN Seq=4 THEN CodeB END) CodeB4,
MAX(CASE WHEN Seq=4 THEN Name END) Name4,
MAX(CASE WHEN Seq=5 THEN CodeB END) CodeB5,
MAX(CASE WHEN Seq=5 THEN Name END) Name5
FROM
(SELECT a.ID,a.CodeA,b.CodeB,b.Name,
ROW_NUMBER() OVER (PARTITION BY a.CodeA ORDER BY b.CodeB) Seq
FROM TableA a
INNER JOIN TableB b ON b.CodeA=a.CodeA) tmp
GROUP BY ID,CodeA
jamshid6様
ご回答ありがとうございます。
ROW_NUMBER 関数というものがあるんですね。
お蔭様で希望のデータを抽出することができました。
とても便利な機能で目から鱗モノです。
助かりました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- その他(Microsoft Office) IF関数について教えてください 2 2022/05/10 13:31
- Excel(エクセル) 至急です><Excelの関数を教えてください。 2 2022/03/22 17:56
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) Excel 数式を教えてください 2 2022/06/02 12:24
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクスプローラーで「2つの条件...
-
<SQL>条件付きで最小値レコード...
-
ACCESSの集計クエリで3件ある...
-
抽出したデータを修正して元の...
-
ADO接続からのACCESSデータシー...
-
Accessで別テーブルの値をフォ...
-
select句副問い合わせ 値の個...
-
GROUP BYを行った後に結合した...
-
ファイル書込みで一行もしくは...
-
SQLServer 日付が直前のレコー...
-
SQL>UPDATEと同時にその件数を...
-
Access を×ボタンで閉じ...
-
sum()の出力結果順に並び替えを...
-
データセットのレコード更新が...
-
COBOLでのランダムアクセス
-
【初歩】ラジオボタンをつかっ...
-
Date型にNULLをセットしたい V...
-
チェックボックスの項目をDBにi...
-
JSPのNULLレコード表示について...
-
レコードセット(ADO.Recordset)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
抽出したデータを修正して元の...
-
ACCESSの集計クエリで3件ある...
-
ACCESSのクエリで同じSQL文だが...
-
エクセル関数 文字(ハイフン...
-
アクセス クエリ-で空白以外の...
-
MS-DOSコマンドプロンプトを途...
-
<SQL>条件付きで最小値レコード...
-
空白文字とスペースの検索
-
SQLを駆使したデータ抽出ってど...
-
商品テーブルからカテゴリ別の...
-
LIKE *ABC* が ACCESSでは使え...
-
Excel VBA:セルを新旧1つずつ...
-
SQLServerからエクセルにデータ...
-
VBA CSVファイルを文字列に
-
エクスプローラーで「2つの条件...
-
エクセルデータの末尾の改行を...
-
さくらレンタルサーバのMysqlの...
-
アクセスのクエリの抽出条件に...
-
Excelの横軸の際の抽出について
-
HTMLファイルから、特定の部分...
おすすめ情報