sql 分类按月统计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 分类按月统计相关的知识,希望对你有一定的参考价值。

我现在有一个表如下
日期 名称 出售数量
2009-9-1 a 10
2009-9-3 b 5
2009-10-1 a 50
2009-10-2 b 10

现在我要得到如下的表

名称 9月 10月
a 10 50
b 5 10
请问这样的SQL语句怎么写呢,

方法一:这种方法列名是固定的。
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)
参考技术A 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
参考技术B 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
参考技术C 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;
参考技术D SELECT [名称],sum((1-abs(sign(DATEPART(MONTH,[日期])-9)))*[出售数量]) '9月',
sum((1-abs(sign(DATEPART(MONTH,[日期])-10)))*[出售数量]) '10月'
FROM 表名

GROUP BY [名称]

MySQL统计函数记录——按月按季度按日时间段统计

按年汇总,统计:
select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, ‘%Y‘);
按月汇总,统计: 
select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, ‘%Y-%m‘);
按季度汇总,统计: 
select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, ‘%Y‘),FLOOR((date_format(col, ‘%m‘)+2)/3)); 
select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, ‘%Y‘),FLOOR((date_format(col, ‘%m‘)+2)/3));
按小时: 
select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by date_format(col, ‘%Y-%m-%d %H ‘);
查询 本年度的数据:
SELECT * FROM mytable WHERE year(FROM_UNIXTIME(my_time)) = year(curdate())
查询数据附带季度数:
SELECT id, quarter(FROM_UNIXTIME(my_time)) FROM mytable;
查询 本季度的数据:
SELECT * FROM mytable WHERE quarter(FROM_UNIXTIME(my_time)) = quarter(curdate());
本月统计:
select * from mytable where month(my_time1) = month(curdate()) and year(my_time2) = year(curdate())
本周统计:
select * from mytable where month(my_time1) = month(curdate()) and week(my_time2) = week(curdate())



















以上是关于sql 分类按月统计的主要内容,如果未能解决你的问题,请参考以下文章

SQL按月统计,按日分组

sql 统计查询(按月统计)

sql中如何把具体日期转化为按月排序?

echart报表插件使用笔记--按月统计

sql截止上月查询语句,按月统计

oracle中group by按月分组统计