写工资分摊的时候碰见一个sql

部门 人员类别 项目 借方科目   贷方科目 金额
工厂 管理人员  个人保险  100204 218105 1000
工厂 管理人员  单位保险  310000 400000 2000
工厂  管理人员  公积金   .... .... ....
 
其中表1中可能还有“ 项目 ”列 是多行 。 

转化成 
表2 :
部门 人员类别 个人保险 借方科目 贷方科目 单位保险 借方科目 贷方科目  公积金 借方科目 贷方科目
工厂 管理人员 1000 100204 218105 2000 310000 400000 。。。。 。。。。 。。。。

 

 

-- sql 2000静态 select 部门 , 人员类别, max ( case 项目 when ' 个人保险 ' then 金额 end ) [ 个人保险 ] , max ( case 项目 when ' 个人保险 ' then 借方科目 end ) [ 借方科目 ] , max ( case 项目 when ' 个人保险 ' then 贷方科目 end ) [ 贷方科目 ] , max ( case 项目 when ' 单位保险 ' then 金额 end ) [ 单位保险 ] , max ( case 项目 when ' 单位保险 ' then 借方科目 end ) [ 借方科目 ] , max ( case 项目 when ' 单位保险 ' then 贷方科目 end ) [ 贷方科目 ] , max ( case 项目 when ' 公积金 ' then 金额 end ) [ 公积金 ] , max ( case 项目 when ' 公积金 ' then 借方科目 end ) [ 借方科目 ] , max ( case 项目 when ' 公积金 ' then 贷方科目 end ) [ 贷方科目 ] from tb group by 部门 , 人员类别 -- sql 2000动态 declare @sql varchar ( 8000 ) set @sql = ' select 部门 , 人员类别 ' select @sql = @sql + ' , max(case 项目 when ''' + 项目 + ''' then 金额 else 0 end) [ ' + 项目 + ' ] ' + ' , max(case 项目 when ''' + 项目 + ''' then 借方科目 else 0 end) [借方科目] ' + ' , max(case 项目 when ''' + 项目 + ''' then 贷方科目 else 0 end) [贷方科目] ' from ( select distinct 项目 from tb) as a set @sql = @sql + ' from tb group by 部门 , 人员类别 ' exec ( @sql ) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值