工资表
 姓名  项目1  项目2  项目3  项目4 项目5......项目表
 项目编号  项目名称
    项目1
    项目2
    项目3
     ...想想看个人工资明细,怎么关联出项目名称啊??

解决方案 »

  1.   

    有两种方法1.把工资表的项目1 项目2 项目3 项目4 项目5......变成列的形式
    select 姓名,项目1 union all
    select 姓名,项目2 union all
    select 姓名,项目3 union all
    ...根据项目名称关联就可以找出
      方法二 把项目表列转行,根据不同的项目名称关联
      

  2.   

    [Quote=引用 1 楼  的回复:]有两种方法1.把工资表的项目1 项目2 项目3 项目4 项目5......变成列的形式
    select 姓名,项目1 union all
    select 姓名,项目2 union all
    select 姓名,项目3 union all
    ...根据项目名称关联就可以找出
      方法二 把项目表列转行,根据不同的项目名称关联
      

  3.   

    select姓名,项目,工资 from tb unpivot (工资 for 项目 in([项目1],[项目2],[项目3])) t
      

  4.   

    --项目多,可以用动态的
    --SQL SERVER 2005动态SQLdeclare  @sql  nvarchar(max)select @sql=isnull(@sql+',','')+quotename(Name)from syscolumnswhere ID=object_id('tb')and Namenotin('姓名')order by Colidset @sql='select姓名,[项目],[工资] from tb unpivot ([工资] for [项目] in('+@sql+'))b'exec(@sql)
      

  5.   

    declare @sql nvarchar(max),@i int
    set @i=1
    set @sql=N'select a.姓名,b.项目名称,a.工资 from (select 姓名,项目,工资 from 工资表 unpivot (工资 for 项目 in ('
    while @i<=40
    begin
    if @i<>40
    set @sql=@sql+N'[项目'+cast(@i as varchar(2))+'],'
    else
    set @sql=@sql+N'[项目'+cast(@i as varchar(2))+N']) as unpvt) a inner join 项目表 b on a.项目=b.项目'
    set @i=@i+1
    end
    --print @sql
    exec @sql
      

  6.   

    select * from 工资表 unpivot([工资] for [项目编号] in([项目1],[项目2]))t
    inner join 项目表 on t.项目编号=项目表.项目编号
      

  7.   


    Namenotin  这个是什么啊,不能识别。。
      

  8.   


    语法错误。。帮帮忙哈~
    select * from gz_dygzb unpivot([工资] for [xmdm] in([xm001],[xm002]))t
    inner join gz_xmb on t.xmdm=gz_xmb.xmdm