2
ここでは、すべてのケースの合計を返したいと思います。私の要件は、特定の製品が過去10週間で販売されたかどうかを知ることです。毎週、1週間に売り上げがあったときに1を、戻ってきていないときに0を返す。だから、1つの製品が過去10週間で売上を出した場合、売上の数に関係なく10を返さなければなりません。しかし、以下のクエリを使用して、私は売り上げの数を取得します。mysqlのすべてのケースの合計を計算する
選択クエリ:
SELECT PartNo
, sum(CASE WHEN DocDate BETWEEN "2017-01-26" AND "2017-02-01" THEN 1 ELSE 0 END
+ CASE WHEN DocDate BETWEEN "2017-02-02" AND "2017-02-08" THEN 1 ELSE 0 END) as Qty1
FROM (`tbl_sales2`)
GROUP
BY `PartNo`
ORDER
BY `Qty1` DESC;
結果:
+-------------+------+
| PartNo | Qty1 |
+-------------+------+
| 09343M05068 | 6 |
| 09343M05069 | 3 |
| 09343M05070 | 2 |
+-------------+------+
3 rows in set (0.00 sec)
期待される結果:
+-------------+------+
| PartNo | Qty1 |
+-------------+------+
| 09343M05068 | 2 |
| 09343M05069 | 2 |
| 09343M05070 | 1 |
+-------------+------+
表問合せ:
CREATE TABLE IF NOT EXISTS `tbl_sales2` (
`SaleId` int(11) NOT NULL AUTO_INCREMENT,
`DocDate` date NOT NULL,
`PartNo` varchar(20) NOT NULL,
PRIMARY KEY (`SaleId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
サンプルデータ:
INSERT INTO `tbl_sales2` (`SaleId`, `DocDate`, `PartNo`) VALUES
('1', '2017-01-26', '09343M05068'),
('2', '2017-01-27', '09343M05068'),
('3', '2017-01-28', '09343M05068'),
('4', '2017-01-29', '09343M05068'),
('5', '2017-01-28', '09343M05069'),
('6', '2017-01-29', '09343M05069'),
('7', '2017-02-02', '09343M05068'),
('8', '2017-02-03', '09343M05068'),
('9', '2017-02-02', '09343M05069'),
('10', '2017-02-02', '09343M05070'),
('11', '2017-02-02', '09343M05070');
なぜあなたは '2017-01-26 'と' 2017-02-08 'の間に'を使用していませんか? – Strawberry