日期:2014-05-18  浏览次数:20460 次

静态行转列
数据如下
品名 日期 数量
a 2012-5-1 10
a 2012-5-10 12
b 2012-5-11 103
c 2012-6-2 60
b 2012-5-25 25
a 2012-6-10 610
b 2012-7-1 710
a 2012-7-26 726
c 2012-8-1 810
c 2012-6-30 630
b 2012-8-20 820
a 2012-8-312 800

想要行专列结果格式:
品名 5月数量 6月数量 7月数量 8月数量
a  
b
c

------解决方案--------------------
SQL code
select 品名, 
sum(case when month(日期)=5 then 数量 else 0 end) as [5月数量],
sum(case when month(日期)=6 then 数量 else 0 end) as [6月数量],
sum(case when month(日期)=7 then 数量 else 0 end) as [7月数量],
sum(case when month(日期)=8 then 数量 else 0 end) as [8月数量]
from tb 
group by 品名

------解决方案--------------------
SELECT 品名,5月数量 ,6月数量,7月数量, 8月数量
FROM 
(SELECT 品名 ,SUBSTRING(日期,5,1)+'月数量', 数量
FROM 表名) p
PIVOT
(
SUM(数量)
FOR 日期 IN
( 5月数量 ,6月数量,7月数量, 8月数量 )
) AS pvt

--日期的类型我当字段处理了,如果是datetime可以参考楼上替代p表