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)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值