我在计算当月的销售额时遇到了问题(工作非常慢),因为我有一张大表,其中有几年的销售额。所以我在每个月的开始找到一个解决方案,计算初始状态直到当月的第1个,所以对于当月14日的销售,只需使用1到14之间的总和(这两个日期之间的实际销售额+初始状态) 。我还添加了一个新列,它将为我提供信息,它是IS(初始状态)还是销售,所以我可以将这两个信息分开。
目标表是zal_3b_orgjed
orgjed | date | rgrupa | sifra | velicina | quantity `| ISIS
221 01-AUG-17 300 3000101 0 1
ISIS不是伊斯兰国家,它是IS初始状态的首字母缩写(记录:)) 该列有两个状态,D -is初始状态,N-它不是初始状态
我有这样的查询
insert into zal_3b_orgjed
select
orgjed,to_date('01.01.2016','dd.mm.yyyy') as datum,rgrupa, sifra,
velicina, sum(kolicina) , 'D'
from
zal_3b_orgjedsavke
where
datum <= to_date('31.12.2015','dd.mm.yyyy')
and sysdate > to_date('31.12.2015','dd.mm.yyyy')
having
sum(kolicina) !=0
group by
orgjed, rgrupa, sifra, velicina
union
select
orgjed,to_date('01.02.2016','dd.mm.yyyy') as datum,rgrupa, sifra,
velicina, sum(kolicina) ,'D'
from
zal_3b_orgjedsavke
where
datum <= to_date('31.01.2016','dd.mm.yyyy')
and sysdate > to_date('31.01.2016','dd.mm.yyyy')
having
sum(kolicina) !=0
group by
orgjed, rgrupa, sifra, velicina
这只是工会的一部分,因为你可以看到有很多工会,而且每个月的第一个月我需要再增加一个工会。是否有一种简单的方法可以做到这一点,而不是手动。我有一些想法,但不知道如何在循环中获得联合。 可以帮一下吗?
答案 0 :(得分:0)
单个查询怎么样?
select orgjed, trunc(datum, 'MON') as datum, rgrupa, sifra, velicina,
sum(kolicina), 'D'
from zal_3b_orgjedsavke
group by trunc(datum, 'MON'), orgjed, rgrupa, sifra, velicina
having sum(kolicina) <> 0 ;
这只会将datum
截断到本月的第一天。
如果要限制日期范围,可能仍需要WHERE
子句。