select t1.id , isnull(t1.列1 , '') 列1 , isnull(t1.列2,'') 列2 , isnull(t2.列3 , '') 列3 , isnull(t2.列4,'') 列4 , isnull(t3.列5 , '') 列5 , isnull(t3.列6,'') 列6 from
(
  select id , 列1 = 'A01' , 列2 = A01 from 表1
  union all
  select id , 列1 = 'A02' , 列2 = A02 from 表1
  ...
  select id , 列1 = 'A0m' , 列2 = A0m from 表1
) t1
full join
(
  select id , 列3 = 'B01' , 列4 = A01 from 表1
  union all
  select id , 列3 = 'B02' , 列4 = A02 from 表1
  ...
  select id , 列3 = 'B0n' , 列4 = A0m from 表1
) t2 on t1.id = t2.id
full join
(
  select id , 列5 = 'C01' , 列6 = C01 from 表1
  union all
  select id , 列5 = 'C02' , 列6 = C02 from 表1
  ...
  select id , 列5 = 'C0x' , 列6 = C0x from 表1
) t3 on t1.id = t3.id其余的类似的写完。

解决方案 »

  1.   

    这样写我也会,我是想问又没有什么简单的方法,因为表1的字段可能很多,一个个select写下来的话代码太长了,我想知道SQL里有没有什么方法有这种功能,可以把字段和数据分段并以列的形式存到另一张表中。
      

  2.   

    想动态SQL,估计不行.我帮你顶.
      

  3.   

    根据syscolumns.name构造一个类似 dawugui(潇洒老乌龟) 的动态SQL。对syscolumns.name进行分组才知道哪个name类别最多,最终才能决定如何去JOIN。别人恐怕帮不上什么忙。