SQL行列转换汇总统计

问题:

表名:MO_TABLE
编号   名称      产量        完成日期
 A01   车间A     900        2013-06-10
 A02   车间B     700        2013-06-10
 A01   车间A     600        2013-06-11
 A02   车间B     1300       2013-06-11
 A01   车间A     800        2013-06-12
 A02   车间B     600        2013-06-12
 .........
 
   统计结果显示:
  编号    名称      2013-06-10     2013-06-11    2013-06-12  ..........
  A01     车间A       900           600             800
  A02     车间B       700           1300            600



SQL:

if object_id('[MO_TABLE]') is not null drop table [MO_TABLE]
go
create table [MO_TABLE] (编号 nvarchar(6),名称 nvarchar(6),产量 int,完成日期 datetime)
insert into [MO_TABLE]
select 'A01','车间A',900,'2013-06-10' union all
select 'A02','车间B',700,'2013-06-10' union all
select 'A01','车间A',600,'2013-06-11' union all
select 'A02','车间B',1300,'2013-06-11' union all
select 'A01','车间A',800,'2013-06-12' union all
select 'A02','车间B',600,'2013-06-12'
 
select * from [MO_TABLE]
  
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + CONVERT(VARCHAR(10),完成日期,120) from [MO_TABLE] group by CONVERT(VARCHAR(10),完成日期,120)
set @sql = '[' + @sql + ']'
exec ('select * from (select * from [MO_TABLE]) a pivot (max(产量) for 完成日期 in (' + @sql + ')) b')
 
/*
编号    名称    2013-06-10    2013-06-11    2013-06-12
A01    车间A    900    600    800
A02    车间B    700    1300    600*/



http://bbs.csdn.net/topics/390505113



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值