select
a.单位名称,
a.人员姓名,
( case when b.code1='职务' then a.code1
when b.code2='职务' then a.code2
...
when b.code15='职务' then a.code15
) as 职务
(case ...) as 部门 ----与职务的查询方法相同
from 人员信息表 a join 信息定义表 b on a.单位id=b.单位id
order by
( case when b.code1='职务' then a.code1
when b.code2='职务' then a.code2
...
when b.code15='职务' then a.code15
)
a.单位名称,
a.人员姓名,
( case when b.code1='职务' then a.code1
when b.code2='职务' then a.code2
...
when b.code15='职务' then a.code15
) as 职务
(case ...) as 部门 ----与职务的查询方法相同
from 人员信息表 a join 信息定义表 b on a.单位id=b.单位id
order by
( case when b.code1='职务' then a.code1
when b.code2='职务' then a.code2
...
when b.code15='职务' then a.code15
)
from (select 单位ID,单位名称,人员姓名,'
select @sql=@sql+'code1 as '+code1+','+
'code2 as '+code2+','+
'code3 as '+code3+','+
'code4 as '+code4+','+
'code5 as '+code5+','+
'code6 as '+code6+','+
'code7 as '+code7+','+
'code8 as '+code8+','+
'code9 as '+code9+','+
'code10 as '+code10+','+
'code11 as '+code11+','+
'code12 as '+code12+','+
'code13 as '+code13+','+
'code14 as '+code14+','+
'code15 as '+code15+' from 人员信息表 where 单位ID=''001'' ' from 信息定义表 where 单位ID='001'exec(@sql)你自已写个循环,把每个单位的信息按规定顺序导入新表中
create table 人员信息表(单位ID varchar(4),单位名称 varchar(10),人员姓名 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 人员信息表
select '001','微软公司','暗暗',' 经理','技术部','长春市'
union all select '002','IBM公司','好好',' 市场部','北京市','员工'
go--转换成竖表
declare @s varchar(8000)
set @s=''
select @s=@s+' union all select 单位ID,单位名称,人员姓名,'
+name+' from 人员信息表'
from syscolumns where object_id('人员信息表')=id and name like 'code%'
set @s=substring(@s,12,8000)
exec('select 单位ID,单位名称,人员姓名,信息=code1 into 人员信息表1 from('+@s+') a ')--显示生成的新表结果
select * from 人员信息表1go
--删除测试表
drop table 人员信息表,人员信息表1/*--测试结果
单位ID 单位名称 人员姓名 信息
---- ---------- ---------- ----------
001 微软公司 暗暗 经理
002 IBM公司 好好 市场部
001 微软公司 暗暗 技术部
002 IBM公司 好好 北京市
001 微软公司 暗暗 长春市
002 IBM公司 好好 员工--*/
create table 人员信息表(单位ID varchar(4),单位名称 varchar(10),人员姓名 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 人员信息表
select '001','微软公司','暗暗',' 经理','技术部','长春市'
union all select '002','IBM公司','好好',' 市场部','北京市','员工'create table 信息定义表(单位ID varchar(4),单位名称 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 信息定义表
select '001','微软公司','职务','部门','住址'
union all select '002','IBM公司','部门','住址','职务'
go--转换成竖表
declare @s1 varchar(8000),@s2 varchar(8000)
select @s1='',@s2=''
select @s1=@s1+' union all select 单位ID,单位名称,人员姓名,类别id='''
+name+''',' +name+' from 人员信息表'
,@s2=@s2+' union all select 单位ID,单位名称,类别id='''
+name+''',' +name+' from 信息定义表'
from syscolumns where object_id('人员信息表')=id and name like 'code%'
select @s1=substring(@s1,12,8000),@s2=substring(@s2,12,8000)
exec('select a.单位ID,a.单位名称,a.人员姓名,类别=b.code1,类别值=a.code1
from('+@s1+') a join ('+@s2+') b on a.单位id=b.单位id and a.类别id=b.类别id
')
go
--删除测试表
drop table 人员信息表,信息定义表/*--测试结果
单位ID 单位名称 人员姓名 类别 类别值
---- ---------- ---------- ---------- ----------
001 微软公司 暗暗 职务 经理
002 IBM公司 好好 部门 市场部
001 微软公司 暗暗 部门 技术部
002 IBM公司 好好 住址 北京市
001 微软公司 暗暗 住址 长春市
002 IBM公司 好好 职务 员工
--*/
create table 人员信息表(单位ID varchar(4),单位名称 varchar(10),人员姓名 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 人员信息表
select '001','微软公司','暗暗','经理','技术部','长春市'
union all select '002','IBM公司','好好','市场部','北京市','员工'create table 信息定义表(单位ID varchar(4),单位名称 varchar(10)
,CODE1 varchar(10),CODE2 varchar(10),CODE3 varchar(10))
insert into 信息定义表
select '001','微软公司','职务','部门','住址'
union all select '002','IBM公司','部门','住址','职务'
go--转换成竖表
declare @s1 varchar(8000),@s2 varchar(8000)
select @s1='',@s2=''
select @s1=@s1+' union all select 单位ID,单位名称,人员姓名,类别id='''
+name+''',' +name+' from 人员信息表'
,@s2=@s2+' union all select 单位ID,单位名称,类别id='''
+name+''',' +name+' from 信息定义表'
from syscolumns where object_id('人员信息表')=id and name like 'code%'
select @s1=substring(@s1,12,8000),@s2=substring(@s2,12,8000)--查询:市场部的人员,根据职务排序exec('select * from(
select a.单位ID,a.单位名称,a.人员姓名,类别=b.code1,类别值=a.code1
from('+@s1+') a join ('+@s2+') b on a.单位id=b.单位id and a.类别id=b.类别id
) a
where 类别=''部门'' and 类别值=''市场部''
')
go
--删除测试表
drop table 人员信息表,信息定义表/*--测试结果
单位ID 单位名称 人员姓名 类别 类别值
---- ---------- ---------- ---------- ----------
002 IBM公司 好好 部门 市场部--*/