根据部门号判断
如果这条数据的部门号主表没有则插入,如果有则把两个表中的同一部门数据相加求总值更新到主表中
CREATE PROCEDURE [dbo].[up_UpdateDeptMain]
AS
INSERT Dept_Main
(Dept_Id,Total_Val)
SELECT distinct Dept_Id , 0 as Total_Val FROM Dept_Detail
where Dept_Id not In (select Dept_Id from Dept_Main) and Dept_Id <>''
update Dept_Main
set Total_Val = Total_Val + b.Sub_Total_Val
from Dept_Main a , (select Dept_Id , sum(Sub_Val) as Sub_Total_Val from Dept_Detail where Dept_Id <>'' group by Dept_Id ) b
where a.Dept_Id = b.Dept_Id
主表 Dept_Main
副表 Dept_Detail
CREATE PROCEDURE [dbo].[up_UpdateDeptMain]
AS
INSERT Dept_Main
(Dept_Id,Total_Val)
SELECT distinct Dept_Id , 0 as Total_Val FROM Dept_Detail
where Dept_Id not In (select Dept_Id from Dept_Main)
update Dept_Main
set Total_Val = Total_Val + b.Sub_Total_Val
from Dept_Main a , (select Dept_Id , sum(Sub_Val) as Sub_Total_Val from Dept_Detail group by Dept_Id) b
where a.Dept_Id = b.Dept_Id
相加求总值什么意思?都是数字没汉字或英文字母?
主表名:zhu
副表名:fu
主表字段:
1.bmNo 部门编号
2.Shu 数量
副表字段:
1.bmNo 部门编号
2.Shu 数量
CREATE PROCEDURE BUMENACTION
AS
BEGIN
--开启事务
BEGIN TRANS
INSERT INTO ZHU(
BMNO, SHU
)
SELECT FU.BMNO, FU.SHU
FROM ZHU
INNER JOIN FU
ON ZHU.BMNO=FU.BMNO
WHERE ZHU.BMNO IS NULL
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
UPDATE ZHU
SET ZHU.SHU = ZHU.SHU + FU.SHU
FROM ZHU
INNER JOIN FU
ON ZHU.BMNO=FU.BMNO
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
--提交
COMMIT
END
(此程序运行前提是主键有且只有一个--部门编号)
使用游标: 能不用就不用。复杂的处理或单纯sql无法实现再使用游标。(运行节省时间)