新人请求指点,
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 +']'
,不知是什么意思?请高手解释一下.谢谢.
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 +']'
,不知是什么意思?请高手解释一下.谢谢.
例如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了。
楼上说的对那是用一表的字段做列头 拼装动态sql 你把每句@SQL print 出来 看看就明白了
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语句运行的结果看看,然后对比下两种方法,可定能弄懂这个动态的。
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,
*/