新人请求指点,
declare @sql varchar(8000)
set @sql = 'select Products'
select @sql=@sql+',max(case material  when '''+material +''' then quantity else 0 end) ['+material +']'
from (select distinct material from scll) as a
set @sql = @sql + ' from scll group by Products'
exec(@sql)
这是列转行的一段语句,其中的max(case material  when '''+material +''' then quantity else 0 end) ['+material +']'
,不知是什么意思?请高手解释一下.谢谢.

解决方案 »

  1.   

    material  是你根据什么来行转列的!
    例如id-----name----num
     1       a      2
     1       b      1
     2       a      4
     2       b      9行转列id-----a-----b
    1      2     1
    2      4     9那么这时的  material  就是上面的name了。
      

  2.   

    每天发帖就有10分..
     楼上说的对那是用一表的字段做列头 拼装动态sql  你把每句@SQL print 出来 看看就明白了
      

  3.   

     是的,material是转换后的列名,生成动态的sql,'''+material +'''这个为什么要这样写啊?不太明白. 
      

  4.   

    select @sql=@sql+',max(case material when '''+material +''' then quantity else 0 end) ['+material +']'
    from (select distinct material from scll) as a下边的from后的子查询是找出了所有material可能存在的值,例如material有 'a'、'b'、'c'三个值,上边的case material when ''' + material + '''相当于case material when 'a'     case material when 'b'  case material when 'c'  找出对应的quantity的值! 再不懂你就直接写出case when语句运行的结果看看,然后对比下两种方法,可定能弄懂这个动态的。
      

  5.   

    --举个例子就明白了
    create table #
    (
    [name] varchar(100)
    )
    insert #
    select 'a' union all
    select 'b' union all
    select 'c'declare @str varchar(max)
    set @str = ''select @str = @str + [name] + ',' from # --从#表中取出的多行记录,都会累加到变量@str上
    select @str
    /*
    (无列名)
    a,b,c,
    */