数据库中有张表格如下
 
       工资金额  工资基数   扣除金额 扣除基数
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.   

    遍历原表,凑出动态SQL,然后执行 exec 之
      

  2.   

    --测试数据:#pay
    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
      

  3.   

    1、先定义4个字符串,用于记录你显示的四行数据的内容
    2、用原数据表生成游标,用游标循环表中的记录,将取出的各字段内容写入四个字符串
    3、PRINT方法,显示四个字符串
      

  4.   

    TO limpile 
    不好意思啊!你回答很好!
    但是我现在想实现的功能是:
    行,列的字段数是不定。所以虽然能实现我说的功能,但是这样写太复杂了。不够灵活啊
      

  5.   

    想灵活? 把原表数据输出后,在前台用xsl呈现吧, 想怎么输出就怎么输出.