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

本文介绍了一种使用SQL进行数据聚合的方法,通过静态和动态SQL查询实现了将多列数据转化为多行展示的效果,适用于财务数据的汇总分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部门 人员类别 项目 借方科目   贷方科目 金额
工厂 管理人员  个人保险  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、付费专栏及课程。

余额充值