SQLアタマアカデミー
第2回 更新なんてこわくない! (3)列から行への更新
列から行への更新
今度は先ほどの逆パターンを考えます。つまり,
表6 サンプルテーブル
ScoreCols:列持ち
student_ | score_ | score_ | score_ |
---|---|---|---|
A001 | 100 | 58 | 90 |
B002 | 77 | 60 | |
C003 | 52 | 49 | |
D004 | 10 | 70 | 100 |
ScoreRows:行持ち
student_ | subject | score |
---|---|---|
A001 | 英語 | |
A001 | 国語 | |
A001 | 数学 | |
B002 | 英語 | |
B002 | 国語 | |
C001 | 英語 | |
C003 | 国語 | |
C003 | 社会 |
表7 ScoreRows:行持ち
student_ | subject | score |
---|---|---|
A001 | 英語 | 100 |
A001 | 国語 | 58 |
A001 | 数学 | 98 |
B002 | 英語 | 77 |
B002 | 国語 | 60 |
C001 | 英語 | 52 |
C003 | 国語 | 49 |
C003 | 社会 |
「C003」
今度は,
リスト8 列→行の更新SQL
UPDATE ScoreRows
SET score = (SELECT CASE ScoreRows.subject
WHEN '英語' THEN score_en
WHEN '国語' THEN score_nl
WHEN '数学' THEN score_mt
ELSE NULL
END
FROM ScoreCols
WHERE student_id = ScoreRows.student_id);
演習問題
さて,
問題1. いまScoreRowsテーブルのscoreはNULLを許可していますが,
問題2. リスト8では,
SQL, データベース, 更新, ScoreColsテーブル, NULL
バックナンバー
SQLアタマアカデミー
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (5)集合指向と手続き型
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (4)OLAP関数と集約関数を組み合わせる
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (3)OLAP専用関数
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (2)OLAP関数の基本構文
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (1)OLAP関数とは何か
- 第10回 結合大全 (5)非等値結合
- 第10回 結合大全 (4)自己結合
- 第10回 結合大全 (3)外部結合
- 第10回 結合大全 (2)内部結合
- 第10回 結合大全 (1)クロス結合