id       收入     员工      日期
1 10000.00 张三 2012-06-01
2 5000.00 李四 2012-05-01
3 9000.00 王五 2012-04-01
4 4000.00 赵四 2012-03-01
5 3000.00 张三 2012-02-01
6 5000.00 赵四 2012-01-01
7 10000.00 李四 2012-06-12
8 5000.00 王五 2012-05-10
9 7000.00 张三 2012-05-06
10 9000.00 赵四 2012-04-25
11 5000.00 李四 2012-04-08
12 9000.00 张三 2012-03-22
13 5000.00 王五 2012-06-16
14 5000.00 王五 2012-02-14
15 7000.00 李四 2012-01-11
----------------------------------------------
month Person1 Person2 Person 合计
1月
2月
3月
1季度合计
4月
5月
6月
2季度合计
年度合计
-------------------------------------------------
请帮我试Mysql 解决一下上面是表 下面是要求 跪求sql语句。

解决方案 »

  1.   

    发到mysql版比较好吧,如果你的Mysql支持cube最好不过,可以用它实现,不然你可能需要使用下面的sql然后在union一下季度的结果。CREATE TABLE EMP(ID INT, PAY FLOAT, NAME VARCHAR(10), DATES DATE);
    INSERT INTO EMP VALUES(1,10000,"ZHANG",'2012-06-01');
    INSERT INTO EMP VALUES(2,5000.00,"LI",'2012-05-01'); 
    INSERT INTO EMP VALUES(3,9000.00,"WANG",'2012-04-01');
    INSERT INTO EMP VALUES(4,4000.00,"ZHAO",'2012-03-01');
    INSERT INTO EMP VALUES(5,3000.00,"ZHANG",'2012-02-01'); 
    INSERT INTO EMP VALUES(6,5000.00,"ZHAO",'2012-01-01'); 
    INSERT INTO EMP VALUES(7,10000.00,"LI",'2012-06-12'); 
    INSERT INTO EMP VALUES(8,5000.00,"WANG",'2012-05-10'); 
    INSERT INTO EMP VALUES(9,7000.00,"ZHANG",'2012-05-06');
    INSERT INTO EMP VALUES(10,9000.00,"ZHAO",'2012-04-25'); 
    INSERT INTO EMP VALUES(11,5000.00,"LI",'2012-04-08'); 
    INSERT INTO EMP VALUES(12,9000.00,"ZHANG",'2012-03-22');
    INSERT INTO EMP VALUES(13,5000.00,"WANG",'2012-06-16'); 
    INSERT INTO EMP VALUES(14,5000.00,"WANG",'2012-02-14'); 
    INSERT INTO EMP VALUES(15,7000.00,"LI",'2012-01-11');
    COMMIT;SELECT MONTH,SUM(ZHANG),SUM(LI),SUM(WANG),SUM(ZHAO)
    FROM (
    SELECT DATE_FORMAT(DATES,'%m') MONTH,
           SUM(CASE WHEN NAME = "ZHANG" THEN PAY END) ZHANG,
           SUM(CASE WHEN NAME = "LI" THEN PAY END) LI,
           SUM(CASE WHEN NAME = "WANG" THEN PAY END) WANG,
           SUM(CASE WHEN NAME = "ZHAO" THEN PAY END) ZHAO
      FROM EMP
     GROUP BY DATE_FORMAT(DATES,'%m')) A
    GROUP BY MONTH WITH ROLLUP;