SQLで行と列を置き換える方法
行と列を置き換えるサンプルSQL †
おみごと!です。(僕が作ったわけではない)ようは一時表を拡張ケース文を利用して実現したわけですね。月別、とか日別とかでこういうことが必要なケースって多々あると思います。僕は、プログラムでぐるぐる回していました。
情報取得元 http://db2forum.jp/viewtopic.php?p=598&sid=5532a0726b4f514eaef6deb3bcb32315
WITH 売上履歴縦持ち (年,商品コード,月,数量) AS (VALUES (2001,'A001', 1, 12), (2001,'A001', 2, 27), (2001,'A001', 3,101), (2001,'A001', 4,454), (2001,'A001', 5,590), (2001,'A001', 6, 32), (2001,'A001', 7, 61), (2001,'A001', 8, 34), (2001,'A001', 9, 13), (2001,'A001',10, 17), (2001,'A001',11, 21), (2001,'A001',12, 99), (2001,'A002', 1, 33), (2001,'A002', 2, 82), (2001,'A002', 3, 90), (2001,'A002', 4, 78), (2001,'A002', 5, 66), (2001,'A002', 6, 89), (2001,'A002', 7, 53), (2001,'A002', 8, 11), (2001,'A002', 9, 23), (2001,'A002',10, 16), (2001,'A002',11, 15), (2001,'A002',12, 78) ), 売上履歴横持ち (年,商品コード,1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月) AS ( SELECT 年, 商品コード, SUM(CASE WHEN 月 = 1 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 2 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 3 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 4 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 5 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 6 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 7 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 8 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 = 9 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 =10 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 =11 THEN 数量 ELSE 0 END), SUM(CASE WHEN 月 =12 THEN 数量 ELSE 0 END) FROM 売上履歴縦持ち GROUP BY 年, 商品コード ) SELECT 年, 商品コード, 1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月 FROM 売上履歴横持ち;