2017-02-26 51 views
2

這裏我想返回所有病例的總和。我的要求是要知道特定產品是否在過去10周銷售。對於每個星期,如果它在一週內有銷售,或者沒有任何銷售,則返回0。所以,如果一件產品在過去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'); 
+0

爲什麼你不是在'2017-01-26'和'2017-02-08'之間使用'? – Strawberry

回答

0

使用MAX,而不是SUM拿到1如果ATLEAST上有一行是PartNo指定日期範圍內:

select PartNo, 
    max(case when DocDate between '2017-01-26' 
        and '2017-02-01' then 1 else 0 end) 
    + max(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 2 
09343M05069 2 
09343M05070 1 
+0

謝謝GurV。它的工作 –