表1 
a b c
1 2 3
11 22 33表2
a b c
4 5 6
44 55 66表3
a b c
7 8 9
77 88 99表4
a a1 a2 b b1 b2 c c1 c2
1 4 7 2 5 8 3 6 9
11 44 77 22 55 88 33 66 99要求:表1表2 表3合并成表4,且表1表2表3都是动态生成,即列数量不固定。

解决方案 »

  1.   

    补充一下:即表1.a,表2.a,表3.a,表1.b,表2.b,表3.b…..而且列名根据动态生成的表格会有不同
      

  2.   

    調用syscolumns--取相同的列名和不同的列名樓主C表的值是否正確,計算邏輯是
      

  3.   

    表1,表2,表3都是动态生成,列名列数都相同,可能都为3列,也可能都为50列。
    最初的想法是:
    select 表1.a a,表2.a a2,表3.a a3,表1.b,表2.b b2,表3.b b3 b1... from 表1,表2,表3
    但不能每次都手写,而且列数一多这就纯粹体力活了。
      

  4.   


    declare @sql_tb varchar(2000),
    @sql_col varchar(2000),
    @sql varchar(8000)
    set @sql_tb = '表1, 表2, 表3'    --注意要加空格
    set @sql_col = 'a, b, c'    --注意要加空格
    set @sql_col = '''' + replace(@sql_col, ', ', ''', ''') + ''''
    set @sql = 'declare @sql varchar(4000) set @sql = ''select '' select @sql = @sql + a.name + ''.'' + b.name + '' ['' +  a.name + ''.''+ b.name + ''],'' from sysobjects a left join syscolumns b on a.id = b.id where a.name in ('
    + '''' + replace(@sql_tb, ', ', ''', ''') + '''' + ') and b.name in (' + @sql_col + ') order by b.name, a.name set @sql = rtrim(@sql) set @sql = left(@sql, len(@sql) - 1) + '' from ' + @sql_tb + ''' print(@sql) exec(@sql)'
    exec(@sql)