数据库中有张表格如下
工资金额 工资基数 扣除金额 扣除基数
1月 100 200 50 0.5
2月 110 210 60 0.6
3月 120 220 70 0.7
4月 130 230 80 0.8我想得到的结果是 1月 2月 3月 4月
金额 基数 金额 基数 金额 基数 金额 基数
工资 100 200 110 210 120 220 130 230
扣除 50 0.5 60 0.6 70 0.7 80 0.8
如何实现?
工资金额 工资基数 扣除金额 扣除基数
1月 100 200 50 0.5
2月 110 210 60 0.6
3月 120 220 70 0.7
4月 130 230 80 0.8我想得到的结果是 1月 2月 3月 4月
金额 基数 金额 基数 金额 基数 金额 基数
工资 100 200 110 210 120 220 130 230
扣除 50 0.5 60 0.6 70 0.7 80 0.8
如何实现?
create table #pay(月份 varchar(3),工资金额 int,工资基数 int,扣除金额 int,扣除基数 decimal(2,1))
insert #pay
select '1月',100,200,50,0.5 union all
select '2月',110,210,60,0.6 union all
select '3月',120,220,70,0.7 union all
select '4月',130,230,80,0.8declare @sql varchar(8000)
select @sql=coalesce(@sql+',','select 类型,')+'['+月份+'金额]=sum(case 月份 when '''+月份+''' then 金额 else 0 end),['+月份+'基数]=sum(case 月份 when '''+月份+''' then 基数 else 0 end)'
from
(
select 月份,类型='工资',金额=工资金额,基数=工资基数 from #pay
union all
select 月份,类型='扣除',金额=扣除金额,基数=扣除基数 from #pay
) a
group by 月份
set @sql=@sql+' from (select 月份,类型=''工资'',金额=工资金额,基数=工资基数 from #pay union all select 月份,类型=''扣除'',金额=扣除金额,基数=扣除基数 from #pay) a group by 类型'
exec(@sql)/*
我想得到的结果是
1月 2月 3月 4月
金额 基数 金额 基数 金额 基数 金额 基数
工资 100 200 110 210 120 220 130 230
扣除 50 0.5 60 0.6 70 0.7 80 0.8
*/--SQL不是Excel,做到要求的格式不可能,实际结果是:/*
类型 1月金额 1月基数 2月金额 2月基数 3月金额 3月基数 4月金额 4月基数
工资 100 200.0 110 210.0 120 220.0 130 230.0
扣除 50 .5 60 .6 70 .7 80 .8
*/--删除对象
drop table #pay
2、用原数据表生成游标,用游标循环表中的记录,将取出的各字段内容写入四个字符串
3、PRINT方法,显示四个字符串
不好意思啊!你回答很好!
但是我现在想实现的功能是:
行,列的字段数是不定。所以虽然能实现我说的功能,但是这样写太复杂了。不够灵活啊