declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result else 0 end) ['+Subject+']'
from (select distinct Subject from CJ) as  a 第三行我就弄不明白 不是只赋值了一次吗 、
为什么 PRINT 后能得到
sum(case Subject when '123' then Result else 0 end) [123],
sum(case Subject when '数学' then Result else 0 end) [数学],
sum(case Subject when '物理' then Result else 0 end) [物理],
sum(case Subject when '英语' then Result else 0 end) [英语],
sum(case Subject when '语文' then Result else 0 end) [语文],
sum(case Subject when '政治' then Result else 0 end) [政治]他是怎么自动 把 FROM 后面的 科目列里的唯一的数据 当成列名自动叠加了5次的 求教

解决方案 »

  1.   

    【select @sql = @sql + 】这部分就是在原来@sql值的基础上叠加的关键
      

  2.   

    因为 (select distinct Subject from CJ) 里有5个值,进行了行转列
      

  3.   

    select @sql = @sql + '...' from ....
      

  4.   

    感谢楼上各位 在问下 '''+Subject+'''  干吗左右各打三个点 呢 这就表示通配符了?
      

  5.   

    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result else 0 end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    简化成 select  set @sql = @sql +‘1111’ from (select distinct Subject from CJ) as a再简化成  select set @sql =@sql +‘1111’ from  tb_test只要  tb_test 有几条数据 set @sql =@sql +‘1111’就会执行几次?