怎么用SQL语句得到月累计和年累计的产量值

楼主
我是社区第507位番薯,欢迎点我头像关注我哦~
产量表(output),表结构如下:
  id             date                 value  
  1        2012-03-01            6500   
  2        2012-03-02           5800
查询output表,实现如下报表,表头如下:
当日产量     月累计      年累计

其中当日产量列就是output表的value列,月累计列的数据是这样的,比如今天是3月15日,月累计就是指从3月1日到3月15日的产量之和,比如今天是3月16日,月累计就是从3月1日到3月16日的产量之和,该怎么用SQL语句得到月累计的值?年累计也是如此,比如今天是3月15日,年累计就是1月、2月再加上3月15天的产量之和,该怎么用SQL语句实现呢?大家帮帮忙!
分享扩散:

沙发
发表于 2012-4-24 08:53:52
oracle语句如下:
---年累计
select sum(t.value) as value  from output t where to_char(t.date,'yyyy')=to_char(sysdate, 'yyyy')
---月累计
select sum(t.value) as value  from output t where to_char(t.date,'yyyy-MM')=to_char(sysdate, 'yyyy-MM')
板凳
发表于 2012-4-24 09:33:45
这种同一列中的计算要在sql中实现很复杂哎
这种问题用FR来做,http://www.finereporthelp.com/#s=%u7D2F%u8BA1
地板
发表于 2012-4-24 22:23:01
这个在百度上有查询的SQL。其实性能会降低,这是肯定的
5楼
发表于 2012-4-25 15:48:10
Ok,谢谢大家了!{:soso_e101:}
6楼
发表于 2012-4-25 20:48:12
直接用FR的函数就可以了。
7楼
发表于 2013-1-10 15:51:23
如何实现的
8楼
发表于 2016-6-30 23:33:47
修练oracle的必备宝典
9楼
发表于 2018-6-14 09:16:44
来自手机
本人新手,如何实现的,给教教,谢谢
10楼
发表于 2018-6-21 13:47:06
如果用纯SQL的方式来实现的话,数据量不大没问题,超过10W条后性能下降明显.
MSSQL代码如下
SELECT [date],SUM([value]) AS [当日产量],
月累计=(SELECT SUM([value]) FROM [output] b
                      WHERE CONVERT(VARCHAR(6),b.[date],112)=CONVERT(VARCHAR(6),a.[date],112) AND b.[date]<=a.[date]),
年累计=(SELECT SUM([value]) FROM [output] b
                      WHERE YEAR(b.[date])=YEAR(a.[date]) AND b.[date]<=a.[date])
  FROM [output] a GROUP BY [date]
11楼
发表于 2018-6-21 15:13:01
F3公式为sum(e3[!0]{b3=$b3 && c3=$c3 && d3<=$d3}),G3公式为sum(e3[!0]{b3=$b3 && d3<=$d3})
12楼
发表于 2020-3-17 17:40:24
可以试试用数据库自带的sum()over()分析函数
13楼
发表于 2020-3-27 23:27:56
来自手机
select 公司,max(日计),max(月计),max(年计) from (
    select 公司,sum(value) as 日计, 0 as 月计, 0 as 年计 where date=xxxxx group by 公司
union
   select 公司, 0, sum(value),0 where date between 月初 and 月末 group by 公司
union
   select 公司,0,0,sum(value) where where date>年初 group by 公司
) group by 公司

差不多就是这种
14楼
发表于 2020-11-20 14:44:25
只会按日期累计
select date, (select sum(value) from output b where b.date<=a.date) as 累计 from output a
group by date
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

13回帖数 2关注人数 27350浏览人数
最后回复于:2020-11-20 14:44

返回顶部 返回列表