- ベストアンサー
複雑なSQLですが、教えてください。
Windows 2000 MySQL でデータベースプログラムを作成しています。 次のようなテーブルから求めたいSQL結果が下のようになっていますが、 なかなか難しいですが、一発のSQLで出来るようにしたいです。 どなたかSQL達人さん教えてください。 テーブル名:ITEMのレコード ----------------------------- iCode iPrice iWeight ----------------------------- 1 50 5 2 60 6 3 70 7 4 50 7 4 80 8 5 90 9 6 100 10 7 100 10 7 110 11 ... 求めたいSQL結果 ----------------------------------------------- iCode iPrice 1 2 3 4 5 6 7 ----------------------------------------------- 50 5 7 60 6 70 7 80 8 90 9 100 10 10 110 11 ---------------------------------------------
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
select iPrice, case when iCode = 1 then sum(iWeight) else null end '1', case when iCode = 2 then sum(iWeight) else null end '2', case when iCode = 3 then sum(iWeight) else null end '3', case when iCode = 4 then sum(iWeight) else null end '4', case when iCode = 5 then sum(iWeight) else null end '5', case when iCode = 6 then sum(iWeight) else null end '6', case when iCode = 7 then sum(iWeight) else null end '7' from ITEM group by iPrice, iCode order by iPrice ; これでどうかな?
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
#2のSQLだと、iPriceが50と100のレコードが出てきちゃいますね。ちょっと失敗しました。 なんで、#2のSQLをインラインビューとして、もう一度group byで集計して、合計を求めてください。 group by のフィールドは、iPriceと、1から7の各項目になります。
- yomo3
- ベストアンサー率32% (88/269)
なかなかみなさん、答えてくれていないようですね。 こんにちは! えーと、単純にご質問の結果を出すのであれば、クロス集計でよいと思います。 TRANSFORM Sum(ITEM.iWeight) AS iValue SELECT ITEM.iPrice FROM ITEM GROUP BY ITEM.iPrice PIVOT ITEM.iCode; こんな感じです。 ただ、TRANSFORMには集計関数を使わなければならないので(クロス集計ですからね)、同じiCode、iPriceに対応するiWeightを集計してしまいます。 これでよろしいのでしょうか?
補足
ご回答有難うございます。 上のSQLはMySQLでも動くのでしょうか。 TRANSFORM-PIVOTはAccessでしか動作しないとあるウェブページで見たんですが。