工资表单设计

 

 

有四个表gz(工资表)gz_jxkq(考勤机导出的数据)xsryb(每个人中夜班费标准)xsbzb(具体标准)
现在gz表中有四列中班、四列夜班,不同的列表示不同的中班费。

考勤机只有一列中班、一列夜班,所以必须根据每个人不同的标准导入不同的列。

“xsbzb.
中班标准、xsbzb.夜班标准存储的是某一标准对应gz表中的列名。

现在主要就是将“xsbzb.中班标准、xsbzb.夜班标准怎样转化为列名。
修改或用动态sql都可。
GZ

编号      部门    姓名    中班1    中班2    中班3    中班4    夜班1    夜班2    夜班3    夜班
4
A001 
信息中心  张三
      0        0      0        0      0        0      0        0   
A002 
人力资源部  李四
      0        0      0        0      0        0      0        0     

gz_jxkq

考勤号      工资号      部门          姓名      中班      夜班

0001      A001     
信息中心      张三
        1        2
0002      A002   
人力资源部      李四
        8        9

xsryb

姓名      享受序号
     
张三
          1
李四
          2

xsbzb

序号        中班标准        夜班标准
     
  1         
中班2          夜班

  2         
中班1          夜班
2         


要达到的效果是在gz表中

张三的中班2列、夜班3列,分别update1
2
李四的中班1列、夜班2列,分别update8
9


我用的sql语句是:

declare @string nvarchar(2000)
select @string=
'update a '+
    'set '+d.
中班标准+'='+cast(b.中班
as varchar(2))+', '
+d.
夜班标准+'='+cast(b.夜班
as varchar(2))
+N'
from GZ a,GZ_jxkq b,xsryb c,xsbzb d
where a.
编号=b.工资号

    and a.
姓名=c.姓名

    and c.
享受序号=d.序号
'
from GZ a,GZ_jxkq b,xsryb c,xsbzb d
where a.
编号=b.工资号

    and a.
姓名=c.姓名

    and c.
享受序号=d.序号

exec(@string)

可上面的sql语句所有人员都是成为了一样的中夜班标准和一样的数值,是语句有问题吗?

----------------------------------------------------------------------------------------------------------

答案:

SQL code

 

declare   @string   nvarchar(2000)

declare   @bianhao varchar(6)

declare youbiao cursor for select 编号 from gz

open youbiao

fetch next from youbiao into @bianhao

while @@fetch_status=0

begin

    select   @string=

    ' update   a   '+

            'set   '+d.中班标准+'='+cast(b.中班   as   varchar(2))+',   '

    +d.夜班标准+'='+cast(b.夜班   as   varchar(2))

    +N'  

    from   GZ   a,GZ_jxkq   b,xsryb   c,xsbzb   d

    where   a.编号=b.工资号

            and   a.姓名=c.姓名

            and   c.享受序号=d.序号

            and   a.编号='+''''+@bianhao+''''

    from   GZ   a,GZ_jxkq   b,xsryb   c,xsbzb   d

    where   a.编号=b.工资号

            and   a.姓名=c.姓名

            and   c.享受序号=d.序号

            and a.编号=@bianhao

 

    exec(@string)

    fetch next from youbiao into @bianhao

end

 

close youbiao

deallocate youbiao

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值