テーブル定義
Mysql
1CREATE TABLE `test_goods` ( 2 `id` INTEGER(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', 3 `order_id` INTEGER(11) DEFAULT NULL COMMENT '注文ID', 4 `row` INTEGER(11) DEFAULT NULL COMMENT '行番号', 5 `goods_cd` VARCHAR(10) COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品コード', 6 `goods_name` VARCHAR(200) COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品名', 7 `price` DECIMAL(10,2) DEFAULT NULL COMMENT '金額', 8 PRIMARY KEY USING BTREE (`id`) 9) ENGINE=InnoDB 10CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
INSERT
Mysql
1INSERT INTO test_goods (`order_id`,`row`,`goods_cd`,`goods_name`,`price`) VALUES 2(10001,1,'book_001','PHP7の基本',3500), 3(10001,2,'waribiki','商品割引',-700), 4(10001,3,'book_002','CENTOS7の基本',2800), 5(10001,4,'book_003','Mysql8入門',3800), 6(10002,1,'book_011','かんたん和食入門',1500), 7(10002,2,'book_022','隠れ家レストラン2019',1800), 8(10002,3,'waribiki','商品割引',-300);
test_goods テーブル
|id|order_id(注文ID)|row(行番号)|goods_cd(商品コード)|goods_name(商品名)|金額(price)|
|:--|:--:|:--:|
|1|10001|1|book_001|PHP7の基本|3,500円|
|2|10001|2|waribiki|商品割引|-700円|
|3|10001|3|book_002|CENTOS7の基本|2,800円|
|4|10001|4|book_003|Mysql8入門|3,800円|
|5|10002|1|book_011|かんたん和食入門|1,500円|
|6|10002|2|book_022|隠れ家レストラン2019|1,800円|
|7|10002|3|waribiki|商品割引|-300円|
このようなテーブルがあり、意味合いとしては、割引したい商品の次のレコードに割引レコードが登録されます。
・ 上記テーブルだと、id:1に対しての割引がid:2に登録されます。
・ 前提としまして、必ず割引したい商品の次に割引レコードが登録されます
・ 割引の商品コードは「waribiki」のみ一つです
やりたいこと
割引レコードあった場合、割引対象レコードから割引額を引いて結果を返したいです。
Mysql
1insert into temp_result_tbl(一時テーブル) 2select 3 id 4 , order_id 5 , row 6 , goods_cd 7 , goods_name 8 , case when (次のレコードが割引レコード(waribiki)だったら) then 9 割引対象 - 割引分 10 else 11 割引がなければスルー 12 end 13from 14test_goods;
上記selectのイメージで結果が下記になるようにしたいです。(test_goodsを書き換えるのではなく一時テーブルとして書き出したいです)
※ idは振りなおさなくてもそのままで問題ありません。
|id|order_id(注文ID)|row(行番号)|goods_cd(商品コード)|goods_name(商品名)|金額(price)|
|:--|:--:|:--:|
|1|10001|1|book_001|PHP7の基本|2,800円|
|3|10001|2|book_002|CENTOS7の基本|2,800円|
|4|10001|3|book_003|Mysql8入門|3,800円|
|5|10002|1|book_011|かんたん和食入門|1,500円|
|6|10002|2|book_022|隠れ家レストラン2019|1,500円|
結果がこのようになるようにしたいです。
処理は上記のようにselectの中で行いたいのですが可能でしょうか?
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー