有  3张表 1  员工工薪基本信息  *(申请单号,审核结果、、、、、、、、)
2  员工工薪信息明细  *(申请单号,部门名称,年,月,姓名、工资、、、)
3  部门统计表        *(年,月,部门名称);我想做一个触发器当 员工工薪基本信息中的 ‘审核结果’被update为'审核通过'的时候,
对 表2 - 员工工薪信息明细中的数据  按部门进行统计
统计mysql-code如下:SELECT
 Sum(`员工工薪信息明细`.`小计`)
 FROM
 `员工工薪信息明细`
 WHERE
 `员工工薪信息明细`.`申请单号` =  new.申请单号
 GROUP BY
 `员工工薪信息明细`.`部门名称` 然后将统计数据  放到  部门统计表 中
请问我该如何做?

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   


    CREATE TRIGGER testref BEFORE  UPDATE  ON 员工工薪基本信息
      FOR EACH ROW BEGIN  
             IF NEW.审核结果='审核通过' THEN         
                insert into 部门统计表
                        SELECT
     Sum(`员工工薪信息明细`.`小计`)
     FROM
     `员工工薪信息明细`
     WHERE
     `员工工薪信息明细`.`申请单号` = new.申请单号
     GROUP BY
     `员工工薪信息明细`.`部门名称`  
    ;         END IF ;                           
    END;
    你的中文表,中文字段,太吓人了。
    大概流程是这样的。你自己再调试调试。
      

  3.   

    部门统计表中哪个字段存入Sum(`员工工薪信息明细`.`小计`)
      

  4.   

    对不起 ,呵呵,我把数据库的给你们贴出来,
    表1                    
    申请单号         varchar 12     主键
    起始时间         varchar 10
    终止时间         varchar 10
    申请人ID        varchar 18
    操作人ID        varchar 18
    审批结果         varchar 20
    审批流类型       varchar 3
    表2
    申请单号         varchar 12     主键
    年         varchar 4      主键
    月         varchar 2      主键
    ID        varchar 18     主键
    姓名         varchar 18     
    部门名称         varchar 10     
    工资         double 0   
    表3
    年         varchar 4
    月         varchar 2
    部门名称         varchar 10
    薪酬和         double 0
      

  5.   

    表3
    年 varchar 4
    月 varchar 
    取什么内容
    CREATE TRIGGER testref BEFORE  UPDATE  ON 员工工薪基本信息
      FOR EACH ROW BEGIN  
             IF NEW.审核结果='审核通过' THEN         
                insert into 部门统计表(薪酬和)
                        SELECT
     Sum(`员工工薪信息明细`.`小计`)
     FROM
     `员工工薪信息明细`
     WHERE
     `员工工薪信息明细`.`申请单号` = new.申请单号
     GROUP BY
     `员工工薪信息明细`.`部门名称`  
    ;         END IF ;                           
    END;
      

  6.   

    各位老大 ,mysql 里  ;输入后 mysql 会被执行的,
    ;
      END IF ;   
    END;
    没有办法执行的
      

  7.   

    在命令行里先执行delimiter |然后再最后执行|
    再delimiter ;
      

  8.   

    1136   column count doesn't match at row1
    表3
    年 varchar 4
    月 varchar  
    取什么内容
    CREATE TRIGGER testref BEFORE UPDATE ON 员工工薪基本信息
      FOR EACH ROW BEGIN   
      IF NEW.审核结果='审核通过' THEN   
      insert into 部门统计表(薪酬和)
      SELECT
     Sum(`员工工薪信息明细`.`小计`)
     FROM
     `员工工薪信息明细`
     WHERE
     `员工工薪信息明细`.`申请单号` = new.申请单号
     GROUP BY
     `员工工薪信息明细`.`部门名称`   
    ;  END IF ;   
    END;代码 和上面写的差不多
    就是 表2 有很多列 ,不匹配
      

  9.   

    1 员工工薪基本信息 *(申请单号,审核结果、、、、、、、、)
    2 员工工薪信息明细 *(申请单号,部门名称,年,月,姓名、工资、、、)
    3 部门统计表 *(年,月,部门名称);把这三个表的show create table贴出来
    show create table 员工工薪基本信息;
      

  10.   

    员工工薪基本信息 | CREATE TABLE `员工工薪基本信息` (
    `申请单号` varchar(12) NOT NULL,
    `起始时间` varchar(10) DEFAULT NULL,
    `终止时间` varchar(10) DEFAULT NULL,
    `申请人ID` varchar(18) DEFAULT NULL,
    `操作人ID` varchar(18) DEFAULT NULL,
    `审批结果` varchar(20) DEFAULT NULL,
    `审批流类型` varchar(3) DEFAULT NULL,
    PRIMARY KEY (`申请单号`)员工工薪金表明细 | CREATE TABLE `员工工薪
    `申请单号` varchar(12) NOT NULL,
    `年` varchar(4) NOT NULL,
    `月` varchar(2) NOT NULL,
    `ID` varchar(18) NOT NULL,
    `姓名` varchar(18) NOT NULL,
    `部门名称` varchar(10) NOT NULL,
    `基本工资` double DEFAULT NULL,
    `事假` double DEFAULT NULL,
    `病假` double DEFAULT NULL,
    `迟到未打卡` double DEFAULT NULL,
    `未到勤扣款` double DEFAULT NULL,
    `周六加班` double DEFAULT NULL,
    `周六未加班` double DEFAULT NULL,
    `加班费` double DEFAULT NULL,
    `应补工资` double DEFAULT NULL,
    `工龄津贴` double DEFAULT NULL,
    `岗位津贴` double DEFAULT NULL,
    `全勤奖` double DEFAULT NULL,
    `奖金` double DEFAULT NULL,
    `小计` double DEFAULT NULL,
    `社保` double DEFAULT NULL,
    `公积金` double DEFAULT NULL,
    `税前工资` double DEFAULT NULL,
    `个人所得税` double DEFAULT NULL,
    `应付工资` double DEFAULT NULL,
    `通讯补贴` double DEFAULT NULL,
    `其他扣除` double DEFAULT NULL,
    `实发工资` double DEFAULT NULL,
    PRIMARY KEY (`申请单号`,`年`,`月`,`ID`)
    ENGINE=InnoDB DEFAULT CHARSET=gb2312 |部门统计表 | CREATE TABLE `部门统计表` (
    `年` varchar(4) NOT NULL DEFAULT '',
    `月` varchar(2) NOT NULL,
    `部门编号` int(11) NOT NULL DEFAULT '0',
    `员工薪酬` double DEFAULT NULL,
    `差旅费` double DEFAULT NULL,
    `原材料费` double DEFAULT NULL,
    PRIMARY KEY (`年`,`月`,`部门编号`)
    ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
      

  11.   

    触发器  
    beginif new.审批结果='审核通过'
     then 
    insert into 部门统计表
     SELECT
     `员工工薪金表明细`.`年`,
    `员工工薪金表明细`.`月`,
     Sum(`员工工薪金表明细`.`小计`)
     
    FROM
     `员工工薪金表明细`
     WHERE
     `员工工薪金表明细`.`申请单号` =  new.申请单号
     GROUP BY
     `员工工薪金表明细`.`部门名称` 
    ;         
    END IF ;                           
    END
      

  12.   

    我自己改过来了 ,
    我还想问一下 ,
    如果不用insert into
    而用 update into
    会不会是  与主键的数据不同的插入,与主键相同的数据得到更新? 如果是的话,直接把 上面的insert into 更改为 update into就可以啦吗?
      

  13.   

    这个需要用 insert into ... on duplicate ...你可以在手册中打开这个SQL语句的使用方法说明和例子。
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html