做报表的时候经常会用到数据统计,
上网参考了些资料,知道用pvoit属性.
现在我们把列转换成行
示例:
统计两给月内的“硬盘”和“内存条”的销售情况
--create table tbl_Records(product varchar(50),months varchar(10),total int)
--insert into tbl_Records values('内存条','1月',1000)
--insert into tbl_Records values('硬盘','1月',500)
--insert into tbl_Records values('内存条','2月',1000)
--insert into tbl_Records values('硬盘','2月',500)
--insert into tbl_Records values('内存条','1月',1000)
--insert into tbl_Records values('硬盘','1月',500)
--insert into tbl_Records values('内存条','2月',1000)
--insert into tbl_Records values('硬盘','2月',500)
【1】静态语句
select * from (select * from tbl_Records) a pivot (sum(total) for months in ([1月],[2月])) b
--结果如下:
--product 1月 2月
--内存条 2000 2000
--硬盘 1000 1000
--注意:当被遍历的列(此例中是列months)的值含有数字时(如本例中的月、月)需要用“[]”括起来
【2】动态语句
declare @contion varchar(8000)
declare @mailSql varchar(8000)
select @contion = isnull(@contion + ',' , '') + '[' + months + ']'from tbl_Records group by months
--为了防止字段中含有数字所以给每个值加上 []
set @mailSql = 'select * from (select * from tbl_Records) a pivot (sum(total) for months in (' + @contion + ')) b'
exec(@mailSql)