--测试数据
create table 表(id int,proc1 decimal(20,1),proc2 decimal(20,1),proc3 decimal(20,1))
insert 表 select 12,3.4,6.7,1.1
go如何得到这样的数据
,数据由多列一行变成了多行一列
NAME
12
3,4
6.7
1.1

解决方案 »

  1.   

    select id from 表
    union all select proc1 from 表
    union all select proc2 from 表
    union all select proc3 from 表
      

  2.   


    select id from t
    union all
    select proc1 
    from t
    union all
    select proc2 from t
    union all
    select proc3 from t
      

  3.   

    我写了个例子是这样,其实这张表有100多列,都用 union all  吗?
      

  4.   

    DECLARE @SQL VARCHAR(4000)SET @SQL = 'SELECT NAME '
    SELECT @SQL = @SQL + ',SUM(CASE KEMU WHEN '''+KEMU+''' THEN CHENGJI END) '+KEMU
         FROM (SELECT DISTINCT KEMU FROM MYTABLE) KEMU
    SELECT @SQL = @SQL + ' FROM MYTABLE GROUP BY NAME'
    EXEC (@SQL)--------------------------------------------------------------------
    SELECT NAME ,SUM(CASE KEMU WHEN 'english' THEN CHENGJI END) english,
                 SUM(CASE KEMU WHEN 'shuxue' THEN CHENGJI END) shuxue,
                 SUM(CASE KEMU WHEN 'yuwei' THEN CHENGJI END) yuwei 
    FROM MYTABLE GROUP BY NAME---------------------------
    仔细看看吧!
      

  5.   

    --try
    select id as Name from T
    union all
    select proc1 as Name from T
    union all
    select proc2 as Name from T
    union all
    select proc3 as Name from T
      

  6.   

    create table ta(id int,proc1 decimal(20,1),proc2 decimal(20,1),proc3 decimal(20,1))
    insert ta select 12,3.4,6.7,1.1
    declare @sql varchar(1000)
    set @sql=''
    select @sql=@sql+'select '+name+' as name from ta union all ' from syscolumns where id=object_id('ta')
    set @sql=left(@sql,len(@sql)-len('union all'))
    exec(@sql)name                   
    ---------------------- 
    12.0
    3.4
    6.7
    1.1
      

  7.   

    roy_88(论坛新星_燃烧你的激情!!) 
    用你的方法可以,但是@sql超过 8000 了,怎么样用两个串或者三个串连接在一起呢
      

  8.   

    这样用:
    create table ta(id int,proc1 decimal(20,1),proc2 decimal(20,1),proc3 decimal(20,1))
    insert ta select 12,3.4,6.7,1.1
    declare @sql varchar(1000)
    set @sql=''
    select @sql=@sql+'select '+name+' as name from ta union all ' from syscolumns where id=object_id('ta') 
    and colid!>2 --这是列名的序号
    set @sql=left(@sql,len(@sql)-len('union all'))declare @sql1 varchar(1000)
    set @sql1=''
    select @sql1=@sql1+'select '+name+' as name from ta union all ' from syscolumns where id=object_id('ta') 
    and colid>2 --这是列名的序号
    set @sql1=left(@sql1,len(@sql1)-len('union all'))exec (@sql+' union all '+@sql1)
    name                   
    ---------------------- 
    12.0
    3.4
    6.7
    1.1
      

  9.   

    roy_88:我记得我揭贴前你还是5个角,结完你就边成一颗星了.