日期:2014-05-18 浏览次数:20442 次
declare @str varchar(4000) select @str=isnull(@str,'')+ ' union all select 表1.编号,表1.姓名,'''+[name]+''' 工资项目,表2.'+[name]+' from 表1,表2 where 表1.身份证号=表2.身份证号' from syscolumns where id=object_id('表2') and [name] not in('姓名','身份证号') set @str=substring(@str,14,4000) exec(@str)
------解决方案--------------------
create table 表1 (身份证号 varchar(7),姓名 varchar(8),编号 varchar(7)) create table 表2 (姓名 varchar(8),身份证号 varchar(7),岗位工资 decimal(8,2),效益工资 decimal(8,2) ,工龄工资 decimal(8,2) ,房帖 decimal(8,2)) insert 表1 values ('111111', '张三', '001.001') insert 表1 values ('111112', '李四', '001.002') insert 表1 values ('111113', '王五', '001.003') insert 表2 values('张三', '111111', 4300, 2000, 1000 , 500) insert 表2 values ('李四', '111112' ,3200, 1800 , 800, 450 ) insert 表2 values ('王五', '111113' , 3000 , 1600 , 700 , 400) go declare @s nvarchar(4000) select @s=isnull(@s+',','')+quotename(Name) from syscolumns where ID=object_id('表2') and Name not in('姓名','身份证号') order by Colid exec('select a.编号,a.姓名,b.[项目],b.[金额] from 表1 a inner join( select 身份证号,[项目],[金额] from 表2 unpivot ([金额] for [项目] in('+@s+'))t )b on a.身份证号=b.身份证号') /* 编号 姓名 项目 金额 ------- -------- -------------------------- --------------------------------------- 001.001 张三 岗位工资 4300.00 001.001 张三 效益工资 2000.00 001.001 张三 工龄工资 1000.00 001.001 张三 房帖 500.00 001.002 李四 岗位工资 3200.00 001.002 李四 效益工资 1800.00 001.002 李四 工龄工资 800.00 001.002 李四 房帖 450.00 001.003 王五 岗位工资 3000.00 001.003 王五 效益工资 1600.00 001.003 王五 工龄工资 700.00 001.003 王五 房帖 400.00 (12 行受影响) */ go drop table 表1,表2
------解决方案--------------------
create table 表1 (身份证号 varchar(7),姓名 varchar(8),编号 varchar(7)) create table 表2 (姓名 varchar(8),身份证号 varchar(7),岗位工资 decimal(8,2),效益工资