下面的测试代码1是我从网上看到的,真的使我受益非浅,帮我解决了一些报表上的问题.但在使用的过程中,有一次无论怎么样也得不出结果,搞了好久也搞不出来,最后一步一步的调试,才发现原来是一个很小的问题:
行变列的字段不能为空.如果有一条记录为空记录的话(例如测试代码2),不能返回任何结果.
-- =================测试代码1开始============================================
create table #(c varchar(100),a varchar(100),b int)
insert # values('AA','aa',11)
insert # values('AA','dd',1)
insert # values('AC','a7a',45)
insert # values('AD','cc',81)
declare @sql varchar(8000)
set @sql = 'select c, '
select @sql = @sql + 'sum(case a when '''+a+'''
then b else 0 end) s'+a+'的数量,'
from (select distinct a from #) as a
print @sql
--通过打印出语句可以看出,技巧就在select distinct a from #这里,
--它循环了所有a的值,也可以看到最后一定会有一个‘,’号,所以下面用left函数去掉最后一位
select @sql = left(@sql,len(@sql)-1) + ' from # group by c'
exec(@sql)
drop table #
--=========================测试代码1结束=================================================
下面的代码不能返回想要的结果
-- =================测试代码2开始============================================
create table #(c varchar(100),a varchar(100),b int)
insert # values('AA','aa',11)
insert # values('AA',null,1)
insert # values('AC','a7a',45)
insert # values('AD','cc',81)
declare @sql varchar(8000)
set @sql = 'select c, '
select @sql = @sql + 'sum(case a when '''+a+'''
then b else 0 end) s'+a+'的数量,'
from (select distinct a from #) as a
print @sql
--通过打印出语句可以看出,技巧就在select distinct a from #这里,
--它循环了所有a的值,也可以看到最后一定会有一个‘,’号,所以下面用left函数去掉最后一位
select @sql = left(@sql,len(@sql)-1) + ' from # group by c'
exec(@sql)
drop table #
--=========================测试代码2结束=================================================