静态行转列,该如何解决
静态行转列
数据如下
品名 日期 数量
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
------解决方案--------------------
数据如下
品名 日期 数量
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表