質問: 例えば以下のテーブルから | ordercode(int) | dat(date) | cat(int) | price(int) | tantou(text) | | --- | --- | --- | --- | --- | | 240 | 2017-05-11 | 1 | 12000 | 鈴木 | | 240 | 2017-05-11 | 1 | 3000 | 鈴木 | | 240 | 2017-05-11 | 2 | 8000 | 鈴木 | | 242 | 2017-05-11 | 1 | 12000 | 田中 | | 242 | 2017-05-11 | 1 | 3000 | 田中 | | 242 | 2017-05-11 | 1 | 2000 | 田中 | | 242 | 2017-05-11 | 2 | 10000 | 田中 | | 242 | 2017-05-11 | 2 | 8000 | 田中 | | 243 | 2017-05-11 | 1 | 12000 | 伊藤 | | 243 | 2017-05-11 | 2 | 8000 | 伊藤 | | 243 | 2017-05-11 | 2 | 5000 | 伊藤 | | 243 | 2017-05-11 | 2 | 2000 | 伊藤 | | 243 | 2017-05-11 | 2 | 3000 | 鈴木 | | 243 | 2017-05-11 | 3 | 5000 | 鈴木 | | 243 | 2017-05-11 | 3 | 3000 | 鈴木 | | 245 | 2017-05-11 | 1 | 12000 | 鈴木 | 「ordercode」「dat」「tanotu」でグループ化し cat毎に合計し 横並びにしたい場合、どのようなsqlを書けばよろしいでしょうか? | ordercode | dat | tantou | cat1 | cat2 | cat3 | | --- | --- | --- | --- | --- | --- | | 240 | 2017-05-11 | 鈴木 | 15000 | 8000 | 0 | | 242 | 2017-05-11 | 田中 | 17000 | 18000 | 0 | | 243 | 2017-05-11 | 伊藤 | 12000 | 15000 | 0 | | 243 | 2017-05-11 | 鈴木 | 0 | 3000 | 8000 | | 245 | 2017-05-11 | 鈴木 | 12000 | 0 | 0 | 追記: 上記から発展させたく追記します。 | ordercode(int) | dat(date) | cat(int) | price(int) | tantou(text) | | --- | --- | --- | --- | --- | | 240 | 2017-05-11 | 1 | 12000 | 鈴木 | | 240 | 2017-05-11 | 1 | 3000 | 鈴木 | | 240 | 2017-05-11 | 2 | 8000 | 鈴木 | | 240 | 2017-05-11 | 3 | 4000 | 鈴木 | | 242 | 2017-05-11 | 1 | 12000 | 田中 | | 242 | 2017-05-11 | 1 | 3000 | 田中 | | 242 | 2017-05-11 | 1 | 2000 | 田中 | | 242 | 2017-05-11 | 3 | 2000 | 田中 | | 242 | 2017-05-11 | 2 | 10000 | 田中 | | 242 | 2017-05-11 | 2 | 8000 | 田中 | | 243 | 2017-05-11 | 1 | 12000 | 伊藤 | | 243 | 2017-05-11 | 2 | 8000 | 伊藤 | | 243 | 2017-05-11 | 2 | 5000 | 伊藤 | | 243 | 2017-05-11 | 2 | 2000 | 伊藤 | | 243 | 2017-05-11 | 1 | 13000 | 鈴木 | | 243 | 2017-05-11 | 2 | 3000 | 鈴木 | | 243 | 2017-05-11 | 3 | 5000 | 鈴木 | | 243 | 2017-05-11 | 3 | 3000 | 鈴木 | | 245 | 2017-05-11 | 1 | 12000 | 鈴木 | | 245 | 2017-05-11 | 3 | 1000 | 鈴木 | 下記のようにしたい。 条件は cat3>0である場合 cat2>0であればcat2-cat3を返す cat2
回答: こうしてください * 元データ ``` create table tbl(ordercode int,dat date,cat int,price int,tantou varchar(20)); insert into tbl values (240,'2017-05-11',1,12000,'鈴木'), (240,'2017-05-11',1,3000,'鈴木'), (240,'2017-05-11',2,8000,'鈴木'), (242,'2017-05-11',1,12000,'田中'), (242,'2017-05-11',1,3000,'田中'), (242,'2017-05-11',1,2000,'田中'), (242,'2017-05-11',2,10000,'田中'), (242,'2017-05-11',2,8000,'田中'), (243,'2017-05-11',1,12000,'伊藤'), (243,'2017-05-11',2,8000,'伊藤'), (243,'2017-05-11',2,5000,'伊藤'), (243,'2017-05-11',2,2000,'伊藤'), (243,'2017-05-11',2,3000,'鈴木'), (243,'2017-05-11',3,5000,'鈴木'), (243,'2017-05-11',3,3000,'鈴木'), (245,'2017-05-11',1,12000,'鈴木'); ``` * 集計 ``` select ordercode,dat,tantou ,sum(price*(cat=1)) as cat1 ,sum(price*(cat=2)) as cat2 ,sum(price*(cat=3)) as cat3 from tbl group by ordercode,dat,tantou ```