- 締切済み
データの加工SQL
お世話になります。 SQL Serverのデータ加工についてSQLを教えてください。 元のデータをSQLを使って下記のほしいデータのようにして取得したいのです。 (出身地毎の行で各種目別に集計したい) お願いします。 *元のデータ(MotoTable) 出身地,得点,種目,実施年,実施月 東京,80,幅跳び,2012,10 東京,54,反復横跳び,2012,10 長野,66,幅跳び,2012,10 新潟,47,幅跳び,2012,10 新潟,90,幅跳び,2012,10 佐賀,25,幅跳び,2012,10 佐賀,66,反復横跳び,2012,10 東京,100,幅跳び,2012,10 東京,19,反復横跳び,2012,10 愛知,5,懸垂,2012,10 愛知,6,懸垂,2012,10 佐賀,7,懸垂,2012,10 *欲しいデータ 出身地,合計点,幅跳び,反復横跳び,懸垂,実施年,実施月 東京,253,180,73,0,2012,10 長野,66,66,0,0,2012,10 新潟,137,137,0,0,2012,10 佐賀,98,25,66,7,2012,10 愛知,11,0,0,11,2012,10
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Siegrune
- ベストアンサー率35% (316/895)
select 出身地,sum(幅跳び),sum(反復横跳び),sum(懸垂),実施年,実施月 from ( select 出身地,得点 as 幅跳び,0 as 反復横跳び,0 as 懸垂,実施年,実施月 from MotoTable where 種目 = '幅跳び' union select 出身地,0 as 幅跳び,得点 as 反復横跳び,0 as 懸垂,実施年,実施月 from MotoTable where 種目 = '反復横跳び' union select 出身地,0 as 幅跳び,0 as 反復横跳び,得点 as 懸垂,実施年,実施月 from MotoTable where 種目 = '懸垂' ) group by 出身地,実施年,実施月 order by 出身地,実施年,実施月 とか、 select 出身地, sum(case when 種目 = '幅跳び' then 得点 else 0 end) as 幅跳び, sum(case when 種目 = '反復横跳び' then 得点 else 0 end) as 反復横跳び, sum(case when 種目 = '懸垂' then 得点 else 0 end) as 懸垂, 実施年,実施月 from MotoTable group by 出身地,実施年,実施月 order by 出身地,実施年,実施月 とか。 ## 下のほうが早そうだが、キーの持ち方とかで一概にはいえない。
- osamuy
- ベストアンサー率42% (1231/2878)