首先,谢谢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
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')
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
*/