• ベストアンサー

複雑な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 ---------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

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)
回答No.3

#2のSQLだと、iPriceが50と100のレコードが出てきちゃいますね。ちょっと失敗しました。 なんで、#2のSQLをインラインビューとして、もう一度group byで集計して、合計を求めてください。 group by のフィールドは、iPriceと、1から7の各項目になります。

  • yomo3
  • ベストアンサー率32% (88/269)
回答No.1

なかなかみなさん、答えてくれていないようですね。 こんにちは! えーと、単純にご質問の結果を出すのであれば、クロス集計でよいと思います。 TRANSFORM Sum(ITEM.iWeight) AS iValue SELECT ITEM.iPrice FROM ITEM GROUP BY ITEM.iPrice PIVOT ITEM.iCode; こんな感じです。 ただ、TRANSFORMには集計関数を使わなければならないので(クロス集計ですからね)、同じiCode、iPriceに対応するiWeightを集計してしまいます。 これでよろしいのでしょうか?

jaekuk
質問者

補足

ご回答有難うございます。 上のSQLはMySQLでも動くのでしょうか。 TRANSFORM-PIVOTはAccessでしか動作しないとあるウェブページで見たんですが。

関連するQ&A