質問: 集計のsqlについて 皆さんの知恵をお借りしたいと思っています。 どなたか、良い案がある方お願いいたします。 以下のテーブルがあります。 (売上テーブル) 品名 金額 購入者 ---------------------------- 鉛筆 20 aさん 鉛筆 40 bさん 鉛筆 30 bさん 鉛筆 30 鉛筆 10 上のテーブルで、品名・購入者を集計キーとして、 金額を集計したい場合、 select 品名,購入者,sum(金額) from 売上テーブル group by 品名,購入者 というsql文で, 品名 金額 購入者 ---------------------------- 鉛筆 20 aさん 鉛筆 70 bさん 鉛筆 40 という結果が得られると思いますが・・・、 これを、 品名 金額 購入者 ---------------------------- 鉛筆 20 aさん 鉛筆 70 bさん 鉛筆 30 鉛筆 10 という結果になるようなsql文を作りたいのです。 購入者が入っているものについては、品名・購入者で集計して、 購入者が空欄のものは集計しないようにしたいと思っています。 unionを使えばできるとは思うのですが、 それ以外の方法で、1回のsql文でできる方法があれば知りたいと思っています。 よろしくお願いします。
回答: 売上テーブルの主キーを加工した値を集計条件に含めてください。 decode(購入者, null, 主キー) 見たいな感じで。 そうすれば、購入者がnullのレコードはdecodeの結果が主キーに、購入者がnullでなければnullになるので お望みの結果が得られるかと。 一意に特定できるような項目がないのであれば、不可能かと。シーケンスとか使えばできないことはないかもしれませんが。