SELECT * FROM tb2张三   语文  74
张三   数学       83
张三   物理  93
李四   语文  74
李四   数学  84
李四   物理 94 -----动态行专列,出错
DECLARE @sql varchar(2000)
SET @sql='select d_Name'
SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject+''
FROM (SELECT DISTINCT d_Subject FROM tb2) ta
SET @sql=@sql+'from tb2 group by d_Name'
EXEC(@sql)服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'tb2' 附近有语法错误。

解决方案 »

  1.   


    --创建表test
    if object_id('test') is not null drop table test
    create table test
    ([name]  varchar(20),
     [subject]  varchar(10),
     [result] int
    )
    go
    --插入数据
    insert into test
    select '张三','语文',73 union all
    select '张三','数学',83 union all
    select '张三','物理',93 union all
    select '李四','语文',76 union all
    select '李四','数学',86 union all
    select '李四','物理',96 --进行查询
    declare @sqlstr varchar(8000)
    select  @sqlstr = ''
    select  @sqlstr = @sqlstr +',sum(case [subject] when '''+[subject]+''' then [result] else 0 end) as '+ [subject] 
    from test 
    group by [subject]
    exec('select [name] as 姓名'+@sqlstr+' from test group by [name]')
    /*结果
    姓名 数学 物理 语文 
    ----------------------------------
    李四 86 96 76
    张三 83 93 73
    */
      

  2.   

    DECLARE @sql varchar(2000)
    SET @sql='select d_Name'
    SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject
    FROM (SELECT DISTINCT d_Subject FROM tb2) ta
    SET @sql=@sql+' from tb2 group by d_Name'
    EXEC(@sql)/*结果
    d_Name 数学 物理 语文 
    ----------------------------------
    李四 86 96 76
    张三 83 93 73
    */
      

  3.   

    SELECT * FROM tb2张三 语文 74
    张三 数学 83
    张三 物理 93
    李四 语文 74
    李四 数学 84
    李四 物理 94 -----动态行专列,出错
    DECLARE @sql varchar(2000)
    SET @sql='select d_Name'
    SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject+''
    FROM (SELECT DISTINCT d_Subject FROM tb2) ta
    SET @sql=@sql+' /*这里加个空格*/from tb2 group by d_Name'
    EXEC(@sql)
      

  4.   


    --SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject+''
    --把 +d_Subject 后面的 +‘’ 去掉 
    --SET @sql=@sql+' from tb2 group by d_Name'
    --在from前加个空格