如何用sql的日期函数,分别查出1月~12月每个月的销售金额?

作者&投稿:第邹 (若有异议请与网页底部的电邮联系)
SQL查询 - 如何一次查询得出十二个月中每个月的销售额?~

select convert(varchar(7), 日期, 120) as 年月, sum(销售额) from 表 group by convert(varchar(7), 日期, 120) order by 年月 asc 销售额是表中的列,日期是表中销售日期 额,,SQLite 倒是不清楚语法,不过你可以根据这个思想去改写,就先把时间变成比如2008-05(年-月格式)这样,然后先分组,最后统计每个组相应列总和就是需要的结果。 select strftime("%Y-%m", 日期) , strftime("%W", 日期) , sum(销售额) from 表 where [你某个客户的查询条件] group by strftime("%Y-%m", 日期), strftime("%W", 日期)不只知道有没语法错误,先按年月分组,然后%W是获得这个日期是今年第几周,这样相同周的就会全部分一组了。

select
地区
, sum(case when 月=1月 then 销售额 else 0 end ) as sum_1
,sum(case when 月=2月 then 销售额 else 0 end ) as sum_2
,sum(case when 月=3月 then 销售额 else 0 end ) as sum_3
,sum(case when 月=4月 then 销售额 else 0 end ) as sum_4
,sum(case when 月=5月 then 销售额 else 0 end ) as sum_5
,sum(case when 月=6月 then 销售额 else 0 end ) as sum_6
,sum(case when 月=7月 then 销售额 else 0 end ) as sum_7
,sum(case when 月=8月 then 销售额 else 0 end ) as sum_8
,sum(case when 月=9月 then 销售额 else 0 end ) as sum_9
,sum(case when 月=10月 then 销售额 else 0 end ) as sum_10
,sum(case when 月=11月 then 销售额 else 0 end ) as 搜索sum_11
,sum(case when 月=12月 then 销售额 else 0 end ) as sum_12
from 表
group by 地区

一般情况下数据是按日期存到数据库中的,但考虑到某些月份是无数据的,可用如下语句:

1、创建测试表及插入测试数据:

create table sale

(id int,

name varchar(10),

sdate datetime,

money int)


insert into sale values (1,'西瓜','2015-01-01',10)

insert into sale values (2,'香蕉','2015-01-05',20)

insert into sale values (3,'苹果','2015-02-01',60)

insert into sale values (4,'葡萄','2015-02-23',345)

insert into sale values (5,'柚子','2015-04-23',10)

insert into sale values (6,'牛奶','2015-05-12',67)

insert into sale values (7,'地瓜','2015-06-01',10)

insert into sale values (8,'土豆','2015-07-01',10)


2、执行语句:

with t as

( select '2015-'+right('0'+cast(number+1 as varchar),2) number from master..spt_values where type='p' and number<=11 )

select t.number month,SUM(isnull(b.money,0)) money 

from t left join sale b on 

t.number=CONVERT(varchar(7),b.sdate,120)

group by t.number


结果截图:



  /*
  分别查出1月~12月每个月的销售金额
  */

  --12个月总是固定的
  DECLARE @sale TABLE(ddate DATETIME,fsale DECIMAL(18,2))
  INSERT INTO @sale(ddate,fsale)
  SELECT '2010-10-11',10000.01 UNION ALL
  SELECT '2010-10-12',20000.02 UNION ALL
  SELECT '2010-09-01',55555.11 UNION ALL
  SELECT '2010-08-21',33333.33 UNION ALL
  SELECT '2009-12-11',77777.11

  SELECT SUM(CASE WHEN MONTH(s.ddate) = 1 THEN s.fsale ELSE 0 END) AS '一月',
  SUM(CASE WHEN MONTH(s.ddate) = 2 THEN s.fsale ELSE 0 END) AS '二月',
  SUM(CASE WHEN MONTH(s.ddate) = 3 THEN s.fsale ELSE 0 END) AS '三月',
  SUM(CASE WHEN MONTH(s.ddate) = 4 THEN s.fsale ELSE 0 END) AS '四月',
  SUM(CASE WHEN MONTH(s.ddate) = 5 THEN s.fsale ELSE 0 END) AS '五月',
  SUM(CASE WHEN MONTH(s.ddate) = 6 THEN s.fsale ELSE 0 END) AS '六月',
  SUM(CASE WHEN MONTH(s.ddate) = 7 THEN s.fsale ELSE 0 END) AS '七月',
  SUM(CASE WHEN MONTH(s.ddate) = 8 THEN s.fsale ELSE 0 END) AS '八月',
  SUM(CASE WHEN MONTH(s.ddate) = 9 THEN s.fsale ELSE 0 END) AS '九月',
  SUM(CASE WHEN MONTH(s.ddate) = 10 THEN s.fsale ELSE 0 END) AS '十月',
  SUM(CASE WHEN MONTH(s.ddate) = 11 THEN s.fsale ELSE 0 END) AS '十一月',
  SUM(CASE WHEN MONTH(s.ddate) = 12 THEN s.fsale ELSE 0 END) AS '十二月'
  FROM @sale AS s
  WHERE YEAR(s.ddate) = 2010


如何用SQL语句把出生日期计算年龄,比如是1984-2-16怎么算出年龄啊_百...
语句为:SELECT FLOOR(DATEDIFF(CURRENT_DATE,'1984-2-16')\/356)常用sql对数据库操作:连接数据库命令: mysql -u root -p密码 创建数据库:create database dbname;查看所有的数据库:show databases;删除数据库: drop database dbname;切换数据库:use dbname;知识拓展:MySQL是一个关系型数据库...

SQL中查询日期语句
select getdate() as 日期 ,year(getdate()) as 年,case month(getdate())when 1 then '一月'when 2 then '二月'when 3 then '三月'when 4 then '四月'when 5 then '五月'when 6 then '六月'when 7 then '七月'when 8 then '八月'when 9 then '九月'when 10 then '十月'when...

请教:想在SQLServer2000下,建一个库,并含每五分钟记录一下当前时间的...
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值 DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 参数 interval的设定值如下:值 缩 写(Sql Server) 说明 Year Yy 年...

如何用SQL把字符型2016R365转换成日期行yyyy-mm-dd,365代表2016年的第...
稍有些烦,但不难。充分使用日期函数:SELECT DateAdd(d, ,CAST(SubString(StrDate, 6, 3) AS INT) - 1 -- 取出天数,需-1 ,DateAdd(y ,Left(StrDate, 4) - 2000 ,'2000-01-01' ) -- 转换到该年度的第1天 )...

SQl语句 日期相加
access与SQL SERVER的日期函数有一点区别,如果是access的话:就用:dateadd("d",5,#2008-08-08#)如果是SQL SERVER的话:dateadd(d,5,"2008-08-08")呵呵,希望能有帮助,^_^

SQL获取日期的所有格式
在SQL Server里有个getdate()的函数是用来获取日期的,不过精确到秒,比如查询select getdate();出来的结果为2009-02-26 15:57:35.357,一般用的比较多的是只获取日期,并不需要时间,这时候就需要用到convert函数了。在函数CONVERT()中你可以使用许多种不同风格的日期和时间格式。下表显示了所有...

在SQL Server中,在当天的基础上加上1个月时间,这是用哪个函数?
DATEADD() 函数是在日期中添加或减去指定的时间间隔。现在,我们希望向 "OrderDate" 添加 2 天,可以使用:SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate FROM Orders 看到了嘛!!由12月29号变成12月31号,增加了2天。针对你这个问题就可以使用:select dateadd(month,1,getdate()) ...

sql 日期问题
SQL Server日期计算 通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用...

mysql 中怎样取一个日期字段的年月?比如signDate字段的值为2013-12-19...
方法一:select date_format(日期字段,'%Y-%m') as '日期' from 表 方法二:mysql有日期函数 date_format SELECT date_format(signDate,'%Y-%m') AS MY_YM FROM tablename WHERE 1;方法三:对这个字段使用函数left或者substring 例如:select left(signDate,7) as date from tablename 或者 s...

SQL里怎么把日期截取为月份
1、首先我们需要找到一个带日期字段的数据表。2、接下来向表中插入日期值。3、然后我们通过month函数获取月份即可,注意month里添加的是列名。4、运行SQL语句以后我们发现日期中的月份已经被提取出来了。5、另外我们还可以在Month中直接加GETDATE函数获取当前时间的月份。6、最后还可以运用MONTH和DATEADD搭配...

云龙县18631644927: SQL中获取当前日期的函数怎么写??(只要**月**日) -
涂诗温胃: 1、使用getdate获取当前日期. 2、用datename 分别获取月份和日. 3、系统标准日期格式没有**月**日,所以使用连接符'+',自定义格式.

云龙县18631644927: sql语句怎么查询在某日期的数据 -
涂诗温胃: 比如查询2014年1月1日-2014年6月30日之间的数据 SELECT * FROM 表 WHERE 日期字段 BETWEEN '20140101' AND '20140630'

云龙县18631644927: 在sql 中的日期查询 -
涂诗温胃: 1> SELECT CONVERT(VARCHAR(30),GETDATE(), 120) 2> go------------------------------ 2010-10-12 13:39:14(1 行受影响)通过 CONVERT 把 日期 装换为 字符串然后用 LIKE '%10-12%' 来处理. -----假如 楼主的 表名是 info 字段是 生日 想查...

云龙县18631644927: sql中怎样用一个函数查询查询四个日期中最大的日期,在线等 -
涂诗温胃: select * from table where 收纳表年月日=(select max(收纳年月日1,收纳年月日2,收纳年月日3,收纳年月日4) from table)

云龙县18631644927: sql如何查出各段时间数据数 -
涂诗温胃: SELECT T.COMPANYNAME 公司名称, COUNT(1) 人数, COUNT(CASE WHEN MONTHS_BETWEEN(SYSDATE, T.HIREDATE)1 END) / COUNT(1) 入职三个月以下人数百分比, COUNT(CASE WHEN MONTHS_BETWEEN(SYSDATE, T.HIREDATE) > 3 THEN 1 END) / COUNT(1) 入职三个月以上人数百分比 FROM EMPLOYEE T GROUP BY T.COMPANYNAME;

云龙县18631644927: SQL 按时间统计
涂诗温胃: 使用SQL的dateadd(d,-2,getdate())函数,具体使用方法百度百科很详细dateadd(按条件如天、年、月等,时间跨度,开始时间基准),(d,-2,getdate())这样就是查2天前的时间select * from a where date>=dateadd(d,-2,getdate()) and date<=getdate()这样就得到两天前的结果,可以满足你的要求 使用if()else根据你给的时间动态组合SQL语句不就完事了么....多大的事

云龙县18631644927: sql 日期、时间函数的使用 -
涂诗温胃: 展开全部1 select datepart(year,getdate()),datepart(month,getdate()),datepart(dd,getdate()) 2 select datediff(dd,'2007-2-5',getdate())

云龙县18631644927: SQL中按日期进行查询,如何截取日期进行查询 -
涂诗温胃: sql server 中, 可以用cast()函数将日期时间转换为日期,比如:cast('2014-01-22 13:22:35.000' as date) 的结果为2014-01-22 以下语句是查询2012年的数据,日期范围可以修改 select * 表名 where CAST(时间字段 as date) between '2012...

云龙县18631644927: 高分 sql语句,求两个日期之间的数据~~ -
涂诗温胃: 我常用informix数据库,应该和sqlserver差别不大,月日即可,我用日期时一般就是varchar,月日之间用符号分隔,一般都用'-' 比如你的是person表,字段有'人' varchar(10),'生日' varchar(5) 张三 01-02 李四 05-04 王五 06-01 select 人,生日 ...

云龙县18631644927: sql语句如何查日期字段的某天的数据? -
涂诗温胃: 1、创建测试表, create table test_date(id varchar2(20), v_date date); 2、插入测试数据 insert into test_date values(1, to_date('2010-9-23 10:10:10','yyyy-mm-dd hh24:mi:ss')); insert into test_date values(2, to_date('2010-9-24 10:10:10','yyyy-mm-...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网