Ⅰ sql语句统计每天、每月、每年的销售总额
一、SQL语句统计每年的销售总额
select year(ordertime) 年,
sum(Total) 销售合计
from 订单表
group by year(ordertime)
二、SQL语句统计每月的销售总额
select year(ordertime) 年,
month(ordertime) 月,
sum(Total) 销售合计
from 订单表
group by year(ordertime),
month(ordertime
三、SQL语句统计每日的销售总额
select year(ordertime) 年,
month(ordertime) 月,
day(ordertime) 日,
sum(Total) 销售合计
from 订单表
group by year(ordertime),
month(ordertime),
day(ordertime)
(1)sql日期按年统计扩展阅读
mysql查询每天、每周、每月的数据方法
一、查询每天的数据
SELECT
COUNT(1) AS countNumber,
DATE_FORMAT(createTime,'%Y-%m-%d') AS dateTime
FROM
testTable
GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d')
二、查询每周的数据
SELECT
COUNT(1) AS countNumber,
WEEK(createTime) as dateTime
FROM
testTable
GROUP BY WEEK(createTime)
三、查询每月的数据:
SELECT
COUNT(1) AS countNumber,
MONTH(createTime) as dateTime
FROM
testTable
GROUP BY MONTH(createTime)
Ⅱ SQL: 一般情况按年分组,特殊年份按指定日期分组,SELECT语句怎么写
如果只是一年的话还好说,如果是三四年那就麻烦了,但是如果每一年都要这样还反而简单了,最怕的就是某些特殊要求,那样不好写。
我写一个一年的,写一个全部的。
这是一年的,可能casewhen不能这么直接放在groupby的后面,那么可以先这么改造一下表,然后外面在套一层select就可以实现了。
select case when year(日期)=2017 and month(日期)<5 then '2017-05-01以前'
when year(日期)=2017 and month(日期)>4 then '2017-05-01至年底' else year(日期) end
年份,count(*) from table group by
(case when year(日期)=2017 and month(日期)<5 then '2017-05-01以前'
when year(日期)=2017 and month(日期)>4 then '2017-05-01至年底' else year(日期) end)
全部的
select concat(year(日期),case when month(日期)<5 then 1 else 2 end) 组合字段,count(*) from table group by concat(year(日期),case when month(日期)<5 then 1 else 2 end)
其实是一样的,就是把原表改了一下,只是这两种情况是比较好改的,如果有三年或者四年是需要进行这样的分组,那就麻烦了。如果有这种情况,建议在表中加一个标示字段,那样就能简单一些了。
Ⅲ sql 从日期中提取年份,按年份求和
思路:先准备好整个时间段的月份,然后关联统计就行了;
--mssql:
WITHTMPAS
(SELECT'1994-1-1'ASBEGAN_DATE,'1994-12-1'ASEND_DATE,100.00ASJS,
1200.00ASZJS
UNIONALL
SELECT'1995-1-1','1995-5-1',100.00,500.00
UNIONALL
SELECT'1995-6-1','1998-3-1',100.00,34000.00
)
,TMP1AS(SELECTDATEADD(MONTH,T.NUMBER,T1.BEGAN_DATE)AST_MONTH
FROMMASTER..SPT_VALUEST,
(SELECTMIN(BEGAN_DATE)ASBEGAN_DATE,
DATEDIFF(MONTH,MIN(BEGAN_DATE),MAX(END_DATE))AST_MONTH
FROMTMP)T1
WHERET.NUMBER<=T1.T_MONTHAND
T.TYPE='P')
SELECTDATENAME(YEAR,T1.T_MONTH)ASYEARS,SUM(T.JS)ASZJS
FROMTMPT
INNERJOINTMP1T1
ONT1.T_MONTH>=CAST(T.BEGAN_DATEASDATE)AND
T1.T_MONTH<=CAST(T.END_DATEASDATE)
GROUPBYDATENAME(YEAR,T1.T_MONTH),T.BEGAN_DATE
ORDERBYDATENAME(YEAR,T1.T_MONTH);
--oracle:
WITHTMPAS
(SELECT'1994-1-1'ASBEGAN_DATE,'1994-12-1'ASEND_DATE,100.00ASJS,
1200.00ASZJS
FROMDUAL
UNIONALL
SELECT'1995-1-1','1995-5-1',100.00,500.00
FROMDUAL
UNIONALL
SELECT'1995-6-1','1998-3-1',100.00,34000.00
FROMDUAL),
TMP1AS
(SELECTADD_MONTHS(BEGAN_DATE,LEVEL-1)T_MONTH
FROM(SELECTTO_DATE(MIN(BEGAN_DATE),'YYYY-MM-DD')BEGAN_DATE,
TO_DATE(MAX(END_DATE),'YYYY-MM-DD')END_DATE
FROMTMP)
CONNECTBYLEVEL<=MONTHS_BETWEEN(END_DATE,BEGAN_DATE)+1)
SELECTTO_CHAR(T_MONTH,'YYYY')ASYEARS,SUM(T.JS)ASZJS
FROMTMPT
INNERJOINTMP1T1
ONT1.T_MONTH>=TO_DATE(T.BEGAN_DATE,'YYYY-MM-DD')AND
T1.T_MONTH<=TO_DATE(T.END_DATE,'YYYY-MM-DD')
GROUPBYTO_CHAR(T_MONTH,'YYYY'),T.BEGAN_DATE
ORDERBYTO_CHAR(T_MONTH,'YYYY')
Ⅳ SQL如何按年份月份统计
select
left(convert(varchar(10),[datetime],120),7)
as
月份,sum(Amount)
as
总数
from
表
where
[datetime]<='你输入的时间条件'
group
by
left(convert(varchar(10),[datetime],120),7)
根据你的数据结果格式重新修改了下:
select
cast(datepart(year,[datetime])
as
varchar)+'年'+cast(datepart(month,[datetime])
as
varchar)+'月'
as
月份,sum(Amount)
as
总数
from
表
where
[datetime]<='你输入的时间条件'
and
datepart(year,[datetime])=left('你输入的时间条件',4)
group
by
cast(datepart(year,[datetime])
as
varchar)+'年'+cast(datepart(month,[datetime])
as
varchar)+'月'
Ⅳ sql查询数据,好多都需要按年份查询,按年份查数据有哪几种方式呢
第一种:
dateCol >= '2011-1-1' and dateCol < '2012-1-1'
第二种:
YEAR(dateCol) = 2011
第三种:
DATENAME(yy, dateCol) = '2011'
Ⅵ SQL按年度统计销售额 怎么写
缺字段,你俩表必须有个订单id关联,你自己查一下
如果存在这个订单id的话
比如查2013年的
selectyear(订单.订购日期)年份,sum(订单明细.单价*订单明细.数量)销售金额
from订单,订单明细where订单,订单id=订单明细.订单id
whereyear(订单.订购日期)=2013
groupbyyear(订单.订购日期)
Ⅶ sql 语句怎么写根据选择的年份统计出该年下每个月的订单总数
这是一些统计每天、每月、每年的销售总额的查询语句,给你参考:
1、每年
select year(ordertime) 年,
sum(Total) 销售合计
from 订单表
group by year(ordertime)
2、每月
select year(ordertime) 年,
month(ordertime) 月,
sum(Total) 销售合计
from 订单表
group by year(ordertime),
month(ordertime
3、每日
select year(ordertime) 年,
month(ordertime) 月,
day(ordertime) 日,
sum(Total) 销售合计
from 订单表
group by year(ordertime),
month(ordertime),
day(ordertime)
另外每日也可以这样:
select convert(char(8),ordertime,112) dt,
sum(Total) 销售合计
from 订单表
group by convert(char(8),ordertime,112)
如果需要增加查询条件,在from后加where 即可。
Ⅷ MSSQL数据按日、月、年统计如何设计
最简单的方法是就用两列,一列是日期,一列是当日数据
日期 数据值
20170421 100
20170422 300
类似上边这样
这样的话,可以统计你所说的年月日的数据
Ⅸ SQL如何按年份月份统计
select left(convert(varchar(10),[datetime],120),7) as 月份,sum(Amount) as 总数
from 表
where [datetime]<='你输入的时间条件'
group by left(convert(varchar(10),[datetime],120),7)
根据你的数据结果格式重新修改了下:
select cast(datepart(year,[datetime]) as varchar)+'年'+cast(datepart(month,[datetime]) as varchar)+'月' as 月份,sum(Amount) as 总数
from 表
where [datetime]<='你输入的时间条件' and datepart(year,[datetime])=left('你输入的时间条件',4)
group by cast(datepart(year,[datetime]) as varchar)+'年'+cast(datepart(month,[datetime]) as varchar)+'月'
Ⅹ sql 按时间统计
当然可以;
用行转列就行了
--静态写法
select 单位,
sum(case when year(时间)=2005 and datepart(q,时间)=1 then 值 else 0 end) as 2005一季,
sum(case when year(时间)=2005 and datepart(q,时间)=2 then 值 else 0 end) as 2005一季,
..........
from table
group by 单位
竖向显示时;
select 单位,
case when year(时间)=2005 and datepart(q,时间)=1 then '2005年第一季'
when when year(时间)=2005 and datepart(q,时间)=2
then '2005年第二季'
..........end as 显示季,
sum(值) as 显示值
from table
group by 单位,case when year(时间)=2005 and datepart(q,时间)=1 then '2005年第一季'
when when year(时间)=2005 and datepart(q,时间)=2
then '2005年第二季'
..........end