首先,谢谢dawugui和 HEROWANG 的热心的回答,使我收益匪浅
原来这个问题我问过,但是大家说不明白,我不得不分开来问,
同时也是对我自己的提高,给我提供学习的机会还是原来的问题:一些零件如CA,它的参数名(列)和参数类型(数据属于不同的表,如tb1,tb2)都是不固定的
没有其他办法和建议的情况下,我只好通过参数关系表tb3来控制列,然后在从数据表中取数据(不同的表,tb1,tb2)
获取的临时表,通过行号将各列数据约束如果有更好的建议,希望大家帮助
如果按照我的想法,问题是:如何获取某一类号的所有数据,并按行号组织
注意CA数据tb1,tb2都有,CB只有tb1有,CC只有tb2有,
tb3中记录这些信息示例表如下:create table tb1(类号 varchar(10) , 列号 int, 行号 int, 数据 int) 
insert into tb1 values('CA', 1, 1 ,2343 )
insert into tb1 values('CA', 1, 2 ,993 )
insert into tb1 values('CA', 1, 3 ,23432) 
insert into tb1 values('CA', 1, 4 ,992 )
insert into tb1 values('CA', 2, 1 ,234 )
insert into tb1 values('CA', 2, 2 ,994 )
insert into tb1 values('CA', 2, 3 ,5 )
insert into tb1 values('CA', 2, 4 ,45 )
insert into tb1 values('CB', 9, 1 ,53 )
insert into tb1 values('CB', 9, 2 ,99 )
insert into tb1 values('CB', 9, 3 ,454 )
insert into tb1 values('CB', 10, 1 ,43534) 
insert into tb1 values('CB', 10, 2 ,99 )
insert into tb1 values('CB', 10, 3 ,994 )
go
create table tb2(类号 varchar(10) , 列号 int , 行号 int , 数据A int , 数据B int) 
insert into tb2 values('CA' , 5 ,1 ,15 , 11 ) 
insert into tb2 values('CA' , 5 ,2 ,26 , 12 ) 
insert into tb2 values('CA' , 5 ,3 ,37 , 13 ) 
insert into tb2 values('CA' , 5 ,4 ,43 , 213) 
insert into tb2 values('CA' , 6 ,1 ,44 , 123) 
insert into tb2 values('CA' , 6 ,2 ,35 , 123) 
insert into tb2 values('CA' , 6 ,3 ,26 , 123) 
insert into tb2 values('CA' , 6 ,4 ,13 , 123) 
insert into tb2 values('CC' , 7 ,1 ,53, 215 ) 
insert into tb2 values('CC' , 7 ,2 ,13 , 11 ) 
insert into tb2 values('CA' , 7 ,3 ,24 , 12 ) 
insert into tb2 values('CA' , 8 ,1 ,36 , 13 ) 
insert into tb2 values('CA' , 8 ,2 ,47 , 213) 
insert into tb2 values('CA' , 8 ,3 ,48 , 123) 
go
create table tb3(类号 varchar(10) , 列号 int , 序号 int,表名 varchar(10)) 
insert into tb3 values('CA' , 1 ,1 ,'tb1') 
insert into tb3 values('CA' , 5 ,2 ,'tb2') 
insert into tb3 values('CA' , 2 ,3 ,'tb1') 
insert into tb3 values('CA' , 6 ,4 ,'tb2') 
insert into tb3 values('CB' , 7 ,1 ,'tb1') 
insert into tb3 values('CB' , 8 ,1 ,'tb1') 
insert into tb3 values('CC' , 9 ,2 ,'tb2') 
insert into tb3 values('CC' , 10 ,3 ,'tb2') 
go

解决方案 »

  1.   

    tb3有点错下面的是更正的create table tb3(类号 varchar(10) , 列号 int , 序号 int,表名 varchar(10)) 
    insert into tb3 values('CA' , 1 ,1 ,'tb1') 
    insert into tb3 values('CA' , 5 ,2 ,'tb2') 
    insert into tb3 values('CA' , 2 ,3 ,'tb1') 
    insert into tb3 values('CA' , 6 ,4 ,'tb2') 
    insert into tb3 values('CB' , 7 ,1 ,'tb1') 
    insert into tb3 values('CB' , 8 ,2 ,'tb1') 
    insert into tb3 values('CC' , 9 ,2 ,'tb2') 
    insert into tb3 values('CC' , 10 ,1 ,'tb2') 
      

  2.   

    --第三个表可以不要,但只能做到这样了.create table tb1(类号 varchar(10) , 列号 int, 行号 int, 数据 int) 
    insert into tb1 values('CA', 1, 1 ,2343 )
    insert into tb1 values('CA', 1, 2 ,993 )
    insert into tb1 values('CA', 1, 3 ,23432) 
    insert into tb1 values('CA', 1, 4 ,992 )
    insert into tb1 values('CA', 2, 1 ,234 )
    insert into tb1 values('CA', 2, 2 ,994 )
    insert into tb1 values('CA', 2, 3 ,5 )
    insert into tb1 values('CA', 2, 4 ,45 )
    insert into tb1 values('CB', 9, 1 ,53 )
    insert into tb1 values('CB', 9, 2 ,99 )
    insert into tb1 values('CB', 9, 3 ,454 )
    insert into tb1 values('CB', 10, 1 ,43534) 
    insert into tb1 values('CB', 10, 2 ,99 )
    insert into tb1 values('CB', 10, 3 ,994 )
    go
    create table tb2(类号 varchar(10) , 列号 int , 行号 int , 数据A int , 数据B int) 
    insert into tb2 values('CA' , 5 ,1 ,15 , 11 ) 
    insert into tb2 values('CA' , 5 ,2 ,26 , 12 ) 
    insert into tb2 values('CA' , 5 ,3 ,37 , 13 ) 
    insert into tb2 values('CA' , 5 ,4 ,43 , 213) 
    insert into tb2 values('CA' , 6 ,1 ,44 , 123) 
    insert into tb2 values('CA' , 6 ,2 ,35 , 123) 
    insert into tb2 values('CA' , 6 ,3 ,26 , 123) 
    insert into tb2 values('CA' , 6 ,4 ,13 , 123) 
    insert into tb2 values('CC' , 7 ,1 ,53, 215 ) 
    insert into tb2 values('CC' , 7 ,2 ,13 , 11 ) 
    insert into tb2 values('CA' , 7 ,3 ,24 , 12 ) 
    insert into tb2 values('CA' , 8 ,1 ,36 , 13 ) 
    insert into tb2 values('CA' , 8 ,2 ,47 , 213) 
    insert into tb2 values('CA' , 8 ,3 ,48 , 123) 
    go--sql 2000动态 
    declare @sql1 varchar(8000)
    declare @sql2 varchar(8000)
    set @sql1 = 'select 行号 '
    select @sql1 = @sql1 + ' , max(case when 列号 = ''' + cast(列号 as varchar) + ''' then 数据 else 0 end) [列' + cast(列号 as varchar) + '数据]'
    from (select distinct 列号 from tb1 where 类号 = 'CA') as a
    set @sql1 = @sql1 + ' from tb1 where 类号 = ''CA'' group by 行号'set @sql2 = 'select 行号 '
    select @sql2 = @sql2 + ' , max(case when 列号 = ''' + cast(列号 as varchar) + ''' then 数据A else 0 end) [列' + cast(列号 as varchar) + '数据A]'
                         + ' , max(case when 列号 = ''' + cast(列号 as varchar) + ''' then 数据B else 0 end) [列' + cast(列号 as varchar) + '数据B]'
    from (select distinct 列号 from tb2 where 类号 = 'CA') as a
    set @sql2 = @sql2 + ' from tb2 where 类号 = ''CA'' group by 行号'exec('select m.* , n.* from (' + @sql1 + ') m full join (' + @sql2 + ') n on m.行号 = n.行号 order by m.行号') drop table tb1 , tb2/*行号          列1数据        列2数据        行号          列5数据A       列5数据B       列6数据A       列6数据B       列7数据A       列7数据B       列8数据A       列8数据B       
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 
    1           2343        234         1           15          11          44          123         0           0           36          13
    2           993         994         2           26          12          35          123         0           0           47          213
    3           23432       5           3           37          13          26          123         24          12          48          123
    4           992         45          4           43          213         13          123         0           0           0           0
    */
      

  3.   

    觉得还是把tb3中的数据和tb1、tb2中的对照关系说一下。看了一会,没看明白