sql2005行列转换(1)

 

做报表的时候经常会用到数据统计,

上网参考了些资料,知道用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)

 

 

你可能感兴趣的:(sql2005行列转换(1))