2017-08-02 78 views
1

我想不僅要統計一組數據的主要分組,還要總計下一個分組級別。在我的情況下,ROLLUP總計一個月(行)的值,但我也想總計銷售代表(列)的值。MySQL總計行數和列數

http://sqlfiddle.com/#!9/60608/1

我最大的努力迄今:

CREATE TABLE IF NOT EXISTS SALES (
Month INT(3), 
Rep CHAR(60), 
Val DECIMAL (20 , 6) 
); 

INSERT INTO SALES (Month, Rep, Val) VALUES 
('9','Rep1',10), 
('9','Rep1',20), 
('9','Rep2',20), 
('9','Rep2',30), 
('9','Rep2',40), 
('10','Rep1',50), 
('10','Rep1',60), 
('10','Rep2',70), 
('11','Rep2',80); 

SELECT Month, IFNULL(Rep, 'Total'), SUM(Val) As TotalValue 
FROM SALES 
GROUP BY FIELD(Month, 
    '9', 
    '10', 
    '11') ASC, Rep WITH ROLLUP 

產生如下

9 Rep1 30 
9 Rep2 90 
9 Total 120 
10 Rep1 110 
10 Rep2 70 
10 Total 180 
11 Rep2 80 
11 Total 80 
11 Total 380 

理想我想它顯示

9 Rep1 30 
9 Rep2 90 
9 Total 120 
10 Rep1 110 
10 Rep2 70 
10 Total 180 
11 Rep2 80 
11 Total 80 
11 Total 380 
0 Rep1 140 
0 Rep2 240 
+0

認真考慮存儲DATE或整月 – Strawberry

+0

會改變月份日期/整數月結果的解決方案? – Walkertron

+0

誰知道;-)。它可能。 – Strawberry

回答

0

例如(雖然實際上我可能會處理在應用程序代碼的彙總數據):

SELECT * FROM (SELECT month,rep,SUM(val) val FROM sales GROUP BY month,rep WITH ROLLUP) x 
UNION 
SELECT 0,rep, SUM(val) FROM sales GROUP BY rep; 
+-------+------+------------+ 
| month | rep | val  | 
+-------+------+------------+ 
|  9 | Rep1 | 30.000000 | 
|  9 | Rep2 | 90.000000 | 
|  9 | NULL | 120.000000 | 
| 10 | Rep1 | 110.000000 | 
| 10 | Rep2 | 70.000000 | 
| 10 | NULL | 180.000000 | 
| 11 | Rep2 | 80.000000 | 
| 11 | NULL | 80.000000 | 
| NULL | NULL | 380.000000 | 
|  0 | Rep1 | 140.000000 | 
|  0 | Rep2 | 240.000000 | 
+-------+------+------------+ 
+0

完美無缺 – Walkertron