横持ちデータを縦持ちデータに変換する方法(SQL)
SQLで横持ちデータを縦持ちにデータに変換する方法についてまとめます。 縦持ちデータを横持ちデータに変換する方法については過去記事にまとめています。
1.実施内容(概要)
SQLで以下のような横持ちデータを
氏名 | 数学 | 国語 | 英語 | ドイツ語 | アラビア語 |
---|---|---|---|---|---|
A君 | 100 | 70 | 60 | 60 | NaN |
B君 | 60 | 50 | 50 | NaN | 60 |
以下のような縦持ちデータに変換します。
氏名 | 科目 | 点数 |
---|---|---|
A君 | 数学 | 100 |
A君 | 国語 | 70 |
A君 | 英語 | 60 |
A君 | ドイツ語 | 60 |
B君 | 数学 | 60 |
B君 | 国語 | 50 |
B君 | 英語 | 50 |
B君 | アラビア語 | 60 |
2.SQL
select * from( select "氏名",'数学' as "科目","数学" as "点数" from t_score_horizontal union all select "氏名",'国語' as "科目","国語" as "点数" from t_score_horizontal union all select "氏名",'英語' as "科目","英語" as "点数" from t_score_horizontal union all select "氏名",'ドイツ語' as "科目","ドイツ語" as "点数" from t_score_horizontal union all select "氏名",'アラビア語' as "科目","アラビア語" as "点数" from t_score_horizontal ) as a where "点数" is not null order by 1