有 3张表 1 员工工薪基本信息 *(申请单号,审核结果、、、、、、、、)
2 员工工薪信息明细 *(申请单号,部门名称,年,月,姓名、工资、、、)
3 部门统计表 *(年,月,部门名称);我想做一个触发器当 员工工薪基本信息中的 ‘审核结果’被update为'审核通过'的时候,
对 表2 - 员工工薪信息明细中的数据 按部门进行统计
统计mysql-code如下:SELECT
Sum(`员工工薪信息明细`.`小计`)
FROM
`员工工薪信息明细`
WHERE
`员工工薪信息明细`.`申请单号` = new.申请单号
GROUP BY
`员工工薪信息明细`.`部门名称` 然后将统计数据 放到 部门统计表 中
请问我该如何做?
2 员工工薪信息明细 *(申请单号,部门名称,年,月,姓名、工资、、、)
3 部门统计表 *(年,月,部门名称);我想做一个触发器当 员工工薪基本信息中的 ‘审核结果’被update为'审核通过'的时候,
对 表2 - 员工工薪信息明细中的数据 按部门进行统计
统计mysql-code如下:SELECT
Sum(`员工工薪信息明细`.`小计`)
FROM
`员工工薪信息明细`
WHERE
`员工工薪信息明细`.`申请单号` = new.申请单号
GROUP BY
`员工工薪信息明细`.`部门名称` 然后将统计数据 放到 部门统计表 中
请问我该如何做?
解决方案 »
- 请问哈,Mysql启动了却无法连接,
- java+mysql5乱码问题
- MY SQL问题
- 大家看下一个关于索引的诡异问题
- mysql 自定义函数问题
- 紧急求救MySQL中多个空格问题!
- 谁能提供点MYSQL空间用用???
- 谁有MySQL的讲义 或者简介 powerpoint 档案的(送400分)
- 请教mysql 中SELECT LAST_INSERT_ID() 获取的值的使用
- [Err] 1064 - You have an error in your SQL syntax; check the manual that corresp
- 是以前的记录失效 生成新的原记录
- 视图来源于2000个表时,如何提升性能?
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
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;
你的中文表,中文字段,太吓人了。
大概流程是这样的。你自己再调试调试。
表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
年 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;
;
END IF ;
END;
没有办法执行的
再delimiter ;
表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 有很多列 ,不匹配
2 员工工薪信息明细 *(申请单号,部门名称,年,月,姓名、工资、、、)
3 部门统计表 *(年,月,部门名称);把这三个表的show create table贴出来
show 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 |
beginif new.审批结果='审核通过'
then
insert into 部门统计表
SELECT
`员工工薪金表明细`.`年`,
`员工工薪金表明细`.`月`,
Sum(`员工工薪金表明细`.`小计`)
FROM
`员工工薪金表明细`
WHERE
`员工工薪金表明细`.`申请单号` = new.申请单号
GROUP BY
`员工工薪金表明细`.`部门名称`
;
END IF ;
END
我还想问一下 ,
如果不用insert into
而用 update into
会不会是 与主键的数据不同的插入,与主键相同的数据得到更新? 如果是的话,直接把 上面的insert into 更改为 update into就可以啦吗?
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html