方法一:这种方法列名是固定的。
select 名称,
sum(case when substring(convert(varchar(7),日期,120),6,2)='09' then 出售数量 else 0 end) as '9月',
sum(case when substring(convert(varchar(7),日期,120),6,2)='10' then 出售数量 else 0 end) as '10月'
from 表
group by 名称
方法二:这种方法虽然麻烦一些,但是支持列名不确定的情况。
declare @sql varchar(2000)
declare @mon varchar(2)
set @sql = 'select 名称'
select @sql = @sql + ',sum(case mon when '''+mon+''' then 出售数量 end) ['+mon+'月]'
from (select distinct substring(convert(varchar(7),日期,120),6,2) mon from 表) as a
select @sql = @sql+' from 表 group by 名称'
exec(@sql)
sql 分类统计 可以使用 sum group by 统计每个分类的总和
比如统计每个月总销售额
id sell month
1 200 1
2 300 1
3 300 2
4 600 3
select month,sum(sell) from table group by month
结果
month sell
1 500
2 300
3 600
select 名称,
sum(case when substr(日期,6,1)=9 then 出售数量 else 0 end) as '9月',
sum(case when substr(日期,6,2)=10 then 出售数量 else 0 end) as '10月'
from table
group by 名称;
你试试吧 我用的是oracle 你如果是sql的就把substr改成substring
SELECT t1.名称, t1.出售数量 as 9月, t2.出售数量 as 10月
FROM 表 as t1, 表 as t2
WHERE t1.名称=t2.名称 AND
extract(month from t1.日期)=9 AND
extract(month from t2.日期)=10;
SELECT [名称],sum((1-abs(sign(DATEPART(MONTH,[日期])-9)))*[出售数量]) '9月',
sum((1-abs(sign(DATEPART(MONTH,[日期])-10)))*[出售数量]) '10月'
FROM 表名
GROUP BY [名称]