2017-08-02 2 views
1

Ich möchte nicht nur die Hauptgruppierung einer Reihe von Daten, sondern auch insgesamt die nächste Gruppierungsebene. In meinem Fall enthält der ROLLUP die Werte für einen Monat (Zeilen), aber ich möchte auch die Werte für den Vertriebsmitarbeiter (Spalten) zusammenfassen.MySQL Grand Total Zeilen und Spalten

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

My best effort to date:

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 

erzeugt folgende

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 

Idealerweise würde ich es

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

ernsthaft in Erwägung ziehen entweder zu speichern ein Datum oder einen ganzen Monat – Strawberry

+0

würde den Monat Datum/integer Monatsergebnis in einer Lösung zu ändern? – Walkertron

+0

Wer weiß das ;-). Es könnte. – Strawberry

Antwort

0

zu zeigen, wie Z. B. (Obwohl in der Praxis würde ich wahrscheinlich die zusammengefassten Daten in Anwendungscode verarbeiten):

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

Perfekt, das ist großartig – Walkertron