标题:请各位帮忙看看这样联动的语句怎么写
只看楼主
unnamed411
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-9-3
结帖率:0
已结贴  问题点数:20 回复次数:3 
请各位帮忙看看这样联动的语句怎么写
[local]1[/local]
EmpID为员工编号
DepID为部门编号(我这里就直接写了部门名,反正一样)
Title为职务
EmpTBID为分管领导编号,如财务总监的分管领导就是001-总经理;财务经理的分管领导就是004-财务总监
EmpTCID为层数,图中只有3层,实际上下面可能还有更多层
TRP为分值

问题点:
举例:当出纳的TRP字段增加10分时,财务经理增加分为“10/4”(4就是财务部的人数和),此时重点来了,财务总监也要增加分“10/7”(财务部人数+IT部人数,因为IT经理的分管领导是财务总监),总经理也相应增加“10/9”(显然9就是总经理以下的所有人数和)

本想通过触发器来实现,但是实在水平有限,只能求助各位大侠给个方案。
如果表设计上还有缺陷,希望大家指出。
感谢~~~
搜索更多相关主题的帖子: 财务经理 财务总监 分管领导 财务部 总经理 
2013-09-03 20:00
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:20 
问题似乎没有表述清楚,请贴出表结构图,贴出你想要的结果视图,一目了然。尽量用图文结合的方式来说明你的问题。

♂ 死后定当长眠,生前何须久睡。♀
2013-09-04 11:18
unnamed411
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-9-3
得分:0 
抱歉,附件没进去~~
http://img.bbs.
2013-09-04 15:47
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 
你好,你的问题可以用触发器来(这个代码可以根据你的具体情况来适当的修改,假定你的表名是[employee])。
实现代码如下:
程序代码:
----------定义表结构
if exists (select * from sys.tables where object_id = object_id(N'[dbo].[employee]') and type in (N'U'))
drop table [dbo].[employee]
go
set ansi_nulls on
go
set quoted_identifier on
go
create table EMPLOYEE
(
    EmpID varchar(50),
    DepID varchar(50),
    Title varchar(50),
    EmpTBID varchar(50),
    EmpTCID int,
    TRP float
)
go

----插入测试数据----------------
delete from EMPLOYEE
insert EMPLOYEE values('001','总经办','总经理',null,0,100)
insert EMPLOYEE values('002','营销中心','副总经理','001',1,100)
insert EMPLOYEE values('004','财务中心','财务总监','001',1,100)
insert EMPLOYEE values('006','财务部','财务经理','004',2,100)
insert EMPLOYEE values('007','IT部','IT经理','004',2,100)
insert EMPLOYEE values('008','财务部','出纳','006',3,100)
insert EMPLOYEE values('009','财务部','成本会计','006',3,100)
insert EMPLOYEE values('010','财务部','总账会计','006',3,100)
insert EMPLOYEE values('011','财务部','材料会计','006',3,100)
insert EMPLOYEE values('012','IT部','系统管理员','007',3,100)

----定义update触发器-----
if exists(select * from sys.triggers where name = N'TR_Table_Update')
drop trigger TR_Table_Update
go

create trigger TR_Table_Update
on EMPLOYEE
after update
as
begin
    if update ([TRP])--当TRP字段被更新时,才会触发此触发器
    begin
        declare @totalBeforeUpdate float--更新前TRP的值
        select @totalBeforeUpdate=[TRP] from deleted

        declare @totalAfterUpdate float--更新后TRP的值
        select @totalAfterUpdate=[TRP] from inserted

        declare @total float --增加的值
        set @total=@totalAfterUpdate-@totalBeforeUpdate

        if @total=10  --当出纳的TRP字段增加10分时执行(根据情况可以自己修改)
        begin
            declare @total_CW int--财务人数
            declare @total_IT int--IT人数
            declare @total_ZJL int--总经理人数

            select @total_CW=count(DepID) from EMPLOYEE where DepID='财务部'
            select @total_IT=count(DepID) from EMPLOYEE where DepID='IT部'
            select @total_ZJL=count(Title) from EMPLOYEE where Title!='总经理'

            update EMPLOYEE set TRP=TRP+@total/@total_CW
            where Title='财务经理'

            update EMPLOYEE set TRP=TRP+@total/(@total_CW+@total_IT)
            where Title='财务总监'

            update EMPLOYEE set TRP=TRP+@total/@total_ZJL
            where Title='总经理'
        end
    end
end
go

----显示更新之前的数据--------------------
select * from EMPLOYEE

----执行更新操作,并触发触发器进行相应的操作。-------------------------------------
update EMPLOYEE set TRP=TRP+10 where Title='出纳'

----显示更新之后的数据-------------------------------------
select * from EMPLOYEE

---------------------------------------
测试结果:


以上代码你可以测试一下是否能解决你的问题。
觉得好的话请将悬赏留下,我是冲着你的悬赏来的,你懂得!!!


[ 本帖最后由 303770957 于 2013-9-9 10:27 编辑 ]

♂ 死后定当长眠,生前何须久睡。♀
2013-09-05 13:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-420048-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080912 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved