产品交易表A:产品 日期 数量
....
AAA 2010-01-01 100
AAA 2010-01-10 -50
BBB 2010-01-01 300
BBB 2010-01-10 -150
....我想通过一个日期范围来查询得到下面的结果:产品 期初结存 入库 出库 期末结存比如输入条件2010-1-1至2010-1-31。能够查出产品在2010-1-1前的结余数量,以及1月份出库、入库的数量,以及1月底当天还剩多少数量。
....
AAA 2010-01-01 100
AAA 2010-01-10 -50
BBB 2010-01-01 300
BBB 2010-01-10 -150
....我想通过一个日期范围来查询得到下面的结果:产品 期初结存 入库 出库 期末结存比如输入条件2010-1-1至2010-1-31。能够查出产品在2010-1-1前的结余数量,以及1月份出库、入库的数量,以及1月底当天还剩多少数量。
解决方案 »
- Oracle一道小题求解
- 如何将一个表中的部分记录赋值到另一个表中?
- 对ORACLE 10g中已存在的表或其它对象,怎样获取创建语句呢?
- 有没有办法在一个insert语句中既使用表名变量又使用rowtype变量?
- 内外网同步问题
- 两个oracle数据库,如何实现表的同步?~~~~~~~~~~~~~~~~~~~~~~~~~谢谢各位
- 大数据量的表如何做分区?
- 各位帮忙,如何定义一个job,让它在每个月的月末24点触发一个存储过程,仁慈点,把写的代码解释解释!!!!!
- oracle9.2 exp 出来的 DMP 如何 IMP 到低版本的ORACLE(如8,8I)
- 我想给一个已定义的表中的一个字段定义为主建,sql语句该怎么写。
- sql语句 计算在线时间?
- oracle安装准备工作:
sum(case when 日期 between '2010-01-01' and '2010-01-31' and 数量<0 then 数量 end)"出库",
sum(case when 日期 between '2010-01-01' and '2010-01-31' and 数量>0 then 数量 end)"入库",
sum(数量)"月底数"
from table1
where 日期<='2010-01-31'
group by 产品
FROM (SELECT 产品,
SUM(CASE WHEN 数量 > 0 THEN 数量 ELSE 0 END) 入库,
SUM(CASE WHEN 数量 < 0 THEN 数量 ELSE 0 END) 出库
FROM 交易表A
WHERE 日期 BETWEEN DATE '2010-1-1' AND DATE DATE '2010-1-31' + 1
GROUP BY 产品) a,
(SELECT 产品, SUM(数量) 结余 FROM 交易表A WHERE 日期 < DATE '2010-1-1' GROUP BY 产品) b
WHERE a.产品(+) = b.产品;
上面这行多了一个DATE
我是说不用SQL命令的方式,应该也有办法的吧
SUM(CASE WHEN 数量 > 0 THEN 数量 ELSE 0 END) 入库,
SUM(CASE WHEN 数量 < 0 THEN 数量 ELSE 0 END) 出库
FROM 交易表A
WHERE to_char(日期,'yyyy-mm-dd') >= '2010-01-01' and to_char(日期,'yyyy-mm-dd') <= '2010-01-31' GROUP BY 产品) a,
(SELECT 产品, SUM(数量) 结余 FROM 交易表A
WHERE to_char(日期,'yyyy-mm-dd') > '2010-1-1' GROUP BY 产品