- ベストアンサー
絶対値ごとに集計したい
MS Access2000を使っています。 クロス集計のウイザードで、 ある製品の性能別数量を出しています。 性能ごとに、個数があるレコードが複数個あって、 その性能ごとに個数を合計しています。 この『性能』は、数値で-30から、+30まであって、 個別に数を数えているのですが、 クロス集計時には、-30と+30を同じ物として集計したい、 全ての性能数値の絶対値を同じ物として集計したいという 要求があるのですが、どのようにすれば実現するのか判りません。 -5 1 -4 2 -3 3 -2 2 -1 1 0 2 1 2 2 4 3 3 4 2 5 1 を 5 2 4 4 3 6 2 6 1 3 0 2 としたいのです。 どなたかご教授ください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
SELECT Abs(Data1) , Sum(Table1.data2) FROM Table1 GROUP BY Abs(Data1) ORDER BY Abs(Data1) DESC;
その他の回答 (2)
- CHRONOS_0
- ベストアンサー率54% (457/838)
>全ての性能数値の絶対値を同じ物として集計したい これに関しては何ら問題ないのでは 性能の絶対値を算出する式フィールドを作るだけです それよりクロス集計するにはフィールド数が足りないですね テーブルから性能の絶対値と行見出しようの常数フィールドを持つクエリを作り そのクエリをクロス集計クエリに変えて 常数フィールド:行見出し 式フィールド:列見出し 個数合計とします 結果 絶対値 0 1 2 3 4 5 個数 2 3 6 6 4 2 SQLは TRANSFORM Sum(kazum.個数) AS 個数の合計 SELECT "個数" AS 絶対値 FROM kazum GROUP BY "個数" PIVOT Abs([性能]);
お礼
詳しい解説ありがとうございます。参考になりました。SQLビューで直接ABS関数を使いました。
- frogeye
- ベストアンサー率47% (11/23)
ウィザードをつかったことが無いのではずしているかもしれませんが。 Accessでは「ABS関数」が使えるはずです。 対象フィールドを「ABS([性能])」としてあげれば絶対値が取れると思います。 ウィザードでできたクエリのデザインかSQLのビューで変更できると思います。 これをグループ化してあげれば集計できると思います。
お礼
abs関数がSQLで使える事を知りませんでした。 ありがとうございました。 良回答は他の方に付けましたが、こちらの回答もとても参考になりました。
お礼
ストレートなご指摘ありがとうございます。 参考になりました。