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
    )

解决方案 »

  1.   

    declare @sql varchar(8000)create newtable table(单位ID,单位名称,人员姓名,  CODE1, CODE2,  CODE3、、、)set @sql='insert newtable select 单位ID,单位名称,人员姓名,部门,住址,职务....(你所需的规定顺序) 
              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)你自已写个循环,把每个单位的信息按规定顺序导入新表中
      

  2.   

    --将横表转换成竖表处理就行啦.--测试表
    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公司      好好         员工--*/
      

  3.   

    --上面的理解错了,应该是这样:--将横表转换成竖表处理就行啦.--测试表
    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公司      好好         职务         员工
    --*/
      

  4.   

    --将横表转换成竖表处理就行啦.--测试表
    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公司      好好         部门         市场部--*/