よっしーの私的空間

機械学習を中心に興味のあることについて更新します

横持ちデータを縦持ちデータに変換する方法(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