CREATE TABLE t_jingfei (ketibianhao VARCHAR(50) NOT NULL, 
ketilaiyuan VARCHAR(30) NOT NULL, 
zhuchirendanwei VARCHAR(30) NOT NULL,
 zhuchiren VARCHAR(80) NOT NULL, jingfei FLOAT,
 boruriqi VARCHAR(10), leibie CHAR(2), PRIMARY KEY (ketibianhao));INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('1111', '01', '01', '07008', 78.0, '2008-01-09', '01');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('222', '02', '02', '07005', 89.0, '2009-01-12', '02');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('333', '03', '01', '07005', 67.0, '2010-1-2', '01');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('444', '01', '07', '06007', 89.0, '2010-1-1', '02');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('666', '08', '07', '07008', 12.0, '2009-1-1', '01');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('555', '09', '06', '07010', 56.0, '2009-1-1', '02');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('777', '04', '07', '07020', 66.0, '2008-1-1', '02');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('88', '07', '04', '09001', 23.0, '2009-1-1', '02');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('99', '09', '04', '05004', 67.0, '2008-9-9', '02');
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('5', '03', '01', '01', 8.0, '2010', NULL);
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('345', '04', '01', '01', 6.0, '2010', NULL);
INSERT INTO keyanguanli.t_jingfei (ketibianhao, ketilaiyuan, zhuchirendanwei, zhuchiren, jingfei, boruriqi, leibie) VALUES ('543', '05', '01', '55', NULL, '2010', NULL);
CREATE TABLE source_table (sourceid CHAR(2) NOT NULL, `sourceName` VARCHAR(20), PRIMARY KEY (sourceid));INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('01', '科技部');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('02', '教育部');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('03', '农业部');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('04', '国家自然基金委');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('05', '国家社科基金');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('06', '省科技厅');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('07', '省哲学社科规划办');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('08', '省教育厅');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('09', '农垦总局');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('10', '大庆市科技局');
INSERT INTO keyanguanli.source_table (sourceid, `sourceName`) VALUES ('11', '开发区经济科技局');
CREATE TABLE danwei (`danweiId` CHAR(2) NOT NULL, `danweiName` VARCHAR(20), PRIMARY KEY (`danweiId`));
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('01', '农学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('02', '工程学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('03', '动物科技学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('04', '经济管理学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('05', '人文社会科学学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('06', '食品学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('07', '信息技术学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('08', '生命科技学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('09', '文理学院');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('10', '军事体育部');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('11', '图书馆');
INSERT INTO keyanguanli.danwei (`danweiId`, `danweiName`) VALUES ('13', '高等职业技术学院');
其中 danwei 表的 danweiid和t_jingfei表的zhuchirendanwei进行关联
t_jingfei表的ketilaiyuan和source_table表的sourceid进行关联
先根据t_表的boruriqi的年份进行查询
如求2009年的课题个数
+------------------+----------+------+------+
| 学院 | 科技部 | 教育部|农业部 | 国家自然基金委|。。合计
+------------------+----------+------+------+
| 农学院|        |       |     |            |  
| 工程学院|      |       |     |            |
| 动物科技学院|          |     |            |
| |        |       |     |            |
| 合计|          |       |     |            |       合计    

解决方案 »

  1.   

    示例:
    SELECT a.danweiName,SUM(b.jingfei),SUM(IF(c.sourceName='教育部',b.jingfei,0)) AS 教育部
     FROM danwei a LEFT JOIN t_jingfei b 
    ON a.danweiId=b.zhuchirendanwei
    LEFT JOIN source_table c
    ON c.sourceid=b.ketilaiyuan WHERE YEAR(b.boruriqi)=2009
    GROUP BY a.danweiName WITH ROLLUP
    其它的自己写
      

  2.   

    因为加入了
    WHERE YEAR(b.boruriqi)=2009
    SELECT a.danweiName,SUM(b.jingfei),SUM(IF(c.sourceName='教育部' AND YEAR(b.boruriqi)=2009,b.jingfei,0)) AS 教育部
     FROM danwei a LEFT JOIN t_jingfei b  
    ON a.danweiId=b.zhuchirendanwei
    LEFT JOIN source_table c
    ON c.sourceid=b.ketilaiyuan 
    GROUP BY a.danweiName WITH ROLLUP;
      

  3.   

    参考下贴中的多种方法http://blog.csdn.net/ACMAIN_CHM/archive/2009/06/19/4283943.aspx