各位大虾,请问:在SQL server 2008中,如何将从一个表中查询得到的一列值,全部转换为列名?

解决方案 »

  1.   

    行转列。如果行数不确定,用动态行转列来实现。可以看看
    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
      

  2.   


    假设在表a中查询列couId,并将列的每个值都做为另一个表b的新列名,代码怎么写?
      

  3.   

    --CREATE TABLE test (id INT ,couId VARCHAR(10) )
     --INSERT INTO test 
     --SELECT 1,'a'
     --UNION ALL 
     --SELECT 2,'b'
     --UNION ALL
     --SELECT 3,'c'
     --UNION ALL
     --SELECT 4,'d'
     
     
     --SELECT * FROM test 
     
     declare @s nvarchar(4000)
     set @s=''
     Select     @s=@s+','+quotename([couId])+'=max(case when [couId]='+quotename(couId,'''')+' then [couId] else ''0'' end)'
     from test group BY couId
     SELECT @s=SUBSTRING(@s,2,LEN(@s))
     
     exec('select '+@s+' from test')
     
     
     /*
     a          b          c          d
     ---------- ---------- ---------- ----------
     a          b          c          d
     
     (1 行受影响)
     */
     
      

  4.   

    给你个小例子吧。
    ----------------科目确定--------------
    --创建测试数据
    if OBJECT_ID('Test') is not null drop table Test
    create table Test(name nvarchar(20),course nvarchar(20),score int)
    go
    insert into Test
    select '张三','数学',80 union all
    select '张三','数学',20 union all
    select '张三','语文',78 union all
    select '张三','英语',89 union all
    select '李四','语文',85 union all
    select '李四','数学',90 union all
    select '王五','英语',88 --select * from Testselect * from Test
    Pivot (
    sum(score) FOR course IN
    (数学,语文,英语))
    as pvt/* 查询结果
    (7 行受影响)
    name                 数学          语文          英语
    -------------------- ----------- ----------- -----------
    李四                   90          85          NULL
    王五                   NULL        NULL        88
    张三                   100         78          89(3 行受影响)
    */----------------科目固定不确定--------------
    if OBJECT_ID('Test') is not null drop table Test
    create table Test(name nvarchar(20),course nvarchar(20),score int)
    go
    insert into Test
    select '张三','数学',80 union all
    select '张三','数学',20 union all
    select '张三','语文',78 union all
    select '张三','英语',89 union all
    select '李四','语文',85 union all
    select '李四','数学',90 union all
    select '王五','英语',88 union all
    select '王五','科目一',88 union all
    select '王五','科目二',77 union all
    select '王五','科目三',66 union all
    select '王五','科目四',55 union all
    select '王五','科目五',44 union all
    select '王五','科目六',33 
    declare @sql varchar(max),
    @columns varchar(2000)
    --拼接科目
    select @columns=isnull(@columns+',','')+course from Test group by course
    --拼接查询语句
    set @sql='select * from Test
    Pivot (
    sum(score) FOR course IN
    ('+@columns+')) as pvt'
    exec (@sql)
    /*
    name   科目二  科目六 科目三  科目四  科目五  科目一   数学   英语   语文
    ------ ------ ------ ------ ------ ------ ------ ------ ------ ------
    李四     NULL   NULL NULL NULL NULL NULL 90  NULL   85
    王五  77    33 66     55     44     88     NULL 88    NULL
    张三     NULL   NULL NULL NULL NULL NULL 100  89    78
    */