有两种方法1.把工资表的项目1 项目2 项目3 项目4 项目5......变成列的形式 select 姓名,项目1 union all select 姓名,项目2 union all select 姓名,项目3 union all ...根据项目名称关联就可以找出 方法二 把项目表列转行,根据不同的项目名称关联
[Quote=引用 1 楼 的回复:]有两种方法1.把工资表的项目1 项目2 项目3 项目4 项目5......变成列的形式 select 姓名,项目1 union all select 姓名,项目2 union all select 姓名,项目3 union all ...根据项目名称关联就可以找出 方法二 把项目表列转行,根据不同的项目名称关联
select姓名,项目,工资 from tb unpivot (工资 for 项目 in([项目1],[项目2],[项目3])) t
--项目多,可以用动态的 --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)
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
select * from 工资表 unpivot([工资] for [项目编号] in([项目1],[项目2]))t inner join 项目表 on t.项目编号=项目表.项目编号
Namenotin 这个是什么啊,不能识别。。
语法错误。。帮帮忙哈~ select * from gz_dygzb unpivot([工资] for [xmdm] in([xm001],[xm002]))t inner join gz_xmb on t.xmdm=gz_xmb.xmdm
select 姓名,项目1 union all
select 姓名,项目2 union all
select 姓名,项目3 union all
...根据项目名称关联就可以找出
方法二 把项目表列转行,根据不同的项目名称关联
select 姓名,项目1 union all
select 姓名,项目2 union all
select 姓名,项目3 union all
...根据项目名称关联就可以找出
方法二 把项目表列转行,根据不同的项目名称关联
--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)
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
inner join 项目表 on t.项目编号=项目表.项目编号
Namenotin 这个是什么啊,不能识别。。
语法错误。。帮帮忙哈~
select * from gz_dygzb unpivot([工资] for [xmdm] in([xm001],[xm002]))t
inner join gz_xmb on t.xmdm=gz_xmb.xmdm