質問: SQLについて(sql server)教えてください。 下記(1)のような商品とスペックを表わしたデータがあります。 商品のスペック毎に行が存在しています。 これを(2)のように商品毎に一行にまとめるためにはどのように記述すればいいのでしょうか? (1) 商品ID,スペックID,スペック値 -------------------- 1,sp1,10cm 1,sp2,15kg 1,sp3,89 2,sp3,34 3,sp1,12cm (2) 商品ID,sp1,sp2,sp3 -------------------- 1,10cm,15kg,89 2,,,34 3,12cm,,
回答: SQL Serverのバージョンは、何でしょうか? SQL Server 2005以降なら、PIVOT機能が実装されています。 PIVOT と UNPIVOT の使用 それより前のSQL Server、あるいは他のRDBMSでも応用できるSQLとしては次のような方法が あります。 ``` select 商品ID, max(case スペックID when 'sp1' then スペック値 else null end) as "sp1", max(case スペックID when 'sp2' then スペック値 else null end) as "sp2", max(case スペックID when 'sp3' then スペック値 else null end) as "sp3" from t1 group by 商品ID order by 商品ID ``` ここで、max関数を使っているのは、group byとの関連で文法上許される記述にするために指定 しており、今回の場合、min関数でも結果は同じです。インラインビューなどを使ってmax関数を 使用しないようにもできますが、記述が複雑になってきます。