ある電子商取引サイトでは,会員の属性を柔軟に変更できるように,“会員項目” 表で管理することにした。“会員項目” 表に対し,次の条件で SQL 文を実行して結果を得る場合,SQL 文の a に入れる字句はどれか。ここで,実線の下線は主キーを,NULL は値がないことを表す。
〔条件〕
- (1)
同一 “会員番号” をもつ複数の行によって,1 人の会員の属性を表す。
- (2)
新規に追加する行の行番号は,最後に追加された行の行番号に 1 を加えた値とする。
- (3)
同一 “会員番号” で同一 “項目名” の行が複数ある場合,より大きい行番号の項目値を採用する。
“会員項目” 表
行番号 | 会員番号 | 項目名 | 項目値 |
|---|---|---|---|
1 | 0111 | 会員名 | 情報太郎 |
2 | 0111 | 最終購入年月日 | 2021-02-05 |
3 | 0112 | 会員名 | 情報花子 |
4 | 0112 | 最終購入年月日 | 2021-01-30 |
5 | 0112 | 最終購入年月日 | 2021-02-01 |
6 | 0113 | 会員名 | 情報次郎 |
〔結果〕
会員番号 | 会員名 | 最終購入年月日 |
|---|---|---|
0111 | 情報太郎 | 2021-02-05 |
0112 | 情報花子 | 2021-02-01 |
0113 | 情報次郎 | NULL |
〔SQL 文〕 SELECT 会員番号, a (CASE WHEN 項目名 = '会員名' THEN 項目値 END) AS 会員名, a (CASE WHEN 項目名 = '最終購入年月日' THEN 項目値 END) AS 最終購入年月日 FROM ( SELECT 会員番号, 項目名, 項目値 FROM 会員項目 WHERE 行番号 IN ( SELECT a (行番号) FROM 会員項目 GROUP BY 会員番号, 項目名 ) ) T GROUP BY 会員番号 ORDER BY 会員番号