有一个表
姓名    人员类别     工资发放日期     基本养老金     价格补贴      生产补贴........
张三      退休         200607           100            100           100
李四      退养         200607           100            100           100
王五      退休         200607           100            100           100
后边还有很多列!都是补款和扣款的项目!
这个表结构不是本人设计的,要不然也不会出现这种问题!
我想通过脚本实现以下结果:人员类别        退休        退休        退养   
姓名            张三        王五        李四       
工资发放日期    200607      200607      200607
基本养老金      100         100         100 
价格补贴        100         100         100
生产补贴        100         100         100 
   .
   .
   .
   .
请各位朋友帮忙解决一下这个问题!我在这里先谢谢了!

解决方案 »

  1.   

    这个需求太奇怪了,看这个结果表得需要动一定的脑筋.请这样试试:
    if object_id('tb') is not null
          drop table tb
    GO
    create table tb(姓名 varchar(10),人员类别 varchar(10),工资发放日期 varchar(10),基本养老金 int,价格补贴 int,生产补贴 int)
    insert tb
    select '张三','退休','200607',100,100,100 union all
    select '李四','退养','200607',100,100,100 union all
    select '王五','退休','200607',100,100,100 
    GO
    declare @sql varchar(8000)
    declare @str1 varchar(8000),@str2 varchar(8000),@str3 varchar(8000),
    @str4 varchar(8000),@str5 varchar(8000),@str6 varchar(8000)
    select 
    @str1 = 'select ''人员类别'' as 人员类别',
    @str2 = 'select ''姓名''',
    @str3 = 'select ''工资发放日期''',
    @str4 = 'select ''基本养老金''',
    @str5 = 'select ''价格补贴''',
    @str6 = 'select ''生产补贴'''
    ----遍历表,动态生成字符串
    select 
    @str1 = @str1 + ',''' + 人员类别 + ''' as ''' + 人员类别 + '''',
    @str2 = @str2 + ',''' + 姓名 + '''',
    @str3 = @str3 + ',''' + rtrim(工资发放日期) + '''',
    @str4 = @str4 + ',''' + rtrim(基本养老金) + '''',
    @str5 = @str5 + ',''' + rtrim(价格补贴) + '''',
    @str6 = @str6 + ',''' + rtrim(生产补贴) + ''''
    from tb
    ----执行
    set @sql =  
    @str1 + ' union all ' + @str2 + ' union all ' + @str3 + ' union all ' + @str4 + ' union all ' + @str5 + ' union all ' + @str6
    --print @sql
    exec(@sql)----清除测试环境
    drop table tb
      

  2.   

    上面动态生成的SQL字符串类似这样的:
    select 
    '人员类别' as 人员类别,'退休' as '退休','退养' as '退养','退休' as '退休' 
    union all 
    select '姓名','张三','李四','王五' 
    union all 
    select '工资发放日期','200607','200607','200607' 
    union all 
    select '基本养老金','100','100','100' 
    union all 
    select '价格补贴','100','100','100' 
    union all 
    select '生产补贴','100','100','100'
    ------------------------------------------------------------------------------------
    如果有更多的列,则请楼主参照代码创建对应的@str7,@str8....