TBL入出库履历 有以下字段
日期,商品CD,仓库,实际在库数,入库予定,入库确定,出庫予定,出庫確定
语句如下:
Select E.日期,E.商品CD,E.仓库,E.实际在库数,E.调整数,E.入库予定,E.入库确定,E.出庫予定,E.出庫確定
from
(SELECT A.日期
,A.商品CD
,A.仓库
,(SELECT NVL(SUM(B.实际在库数),0)
FROM 入出库履历 B
WHERE
B.商品CD = A.商品CD
AND B.仓库 = A.仓库
AND B.日期=A.日期) 实际在库数
,(SELECT NVL(SUM(C.入库予定),0)+NVL(SUM(C.入库确定),0)-NVL(SUM(C.出庫予定),0)-NVL(SUM(C.出庫確定),0)
FROM 入出库履历 C
WHERE NOT EXISTS
(SELECT 1 FROM 入出库履历 WHERE 商品CD=C.商品CD AND
仓库=C.仓库 AND 日期>=C.日期 AND 日期<A.日期 AND 实际在库数<>0)
AND C.日期<=A.日期
AND C.商品CD = A.商品CD
AND C.仓库 = A.仓库) 调整数
,SUM(A.入库予定) 入库予定
,SUM(A.入库确定) 入库确定
,SUM(A.出庫予定) 出庫予定
,SUM(A.出庫確定) 出庫確定
FROM 入出库履历 A
GROUP BY A.日期
,A.商品CD
,A.仓库,) E
order by E.商品CD,E.仓库
调整数统计的是最近的一次有实在库的日期到当前日期之间的记录
现在表里面有4万多条数据,执行需要10分钟左右,有什么办法可以提高效率啊
日期,商品CD,仓库,实际在库数,入库予定,入库确定,出庫予定,出庫確定
语句如下:
Select E.日期,E.商品CD,E.仓库,E.实际在库数,E.调整数,E.入库予定,E.入库确定,E.出庫予定,E.出庫確定
from
(SELECT A.日期
,A.商品CD
,A.仓库
,(SELECT NVL(SUM(B.实际在库数),0)
FROM 入出库履历 B
WHERE
B.商品CD = A.商品CD
AND B.仓库 = A.仓库
AND B.日期=A.日期) 实际在库数
,(SELECT NVL(SUM(C.入库予定),0)+NVL(SUM(C.入库确定),0)-NVL(SUM(C.出庫予定),0)-NVL(SUM(C.出庫確定),0)
FROM 入出库履历 C
WHERE NOT EXISTS
(SELECT 1 FROM 入出库履历 WHERE 商品CD=C.商品CD AND
仓库=C.仓库 AND 日期>=C.日期 AND 日期<A.日期 AND 实际在库数<>0)
AND C.日期<=A.日期
AND C.商品CD = A.商品CD
AND C.仓库 = A.仓库) 调整数
,SUM(A.入库予定) 入库予定
,SUM(A.入库确定) 入库确定
,SUM(A.出庫予定) 出庫予定
,SUM(A.出庫確定) 出庫確定
FROM 入出库履历 A
GROUP BY A.日期
,A.商品CD
,A.仓库,) E
order by E.商品CD,E.仓库
调整数统计的是最近的一次有实在库的日期到当前日期之间的记录
现在表里面有4万多条数据,执行需要10分钟左右,有什么办法可以提高效率啊
解决方案 »
- 急!急!急!!Oracle Enterprise Manager Database Control以SYS用户登陆数据库时出现问题????
- win 2003 32位 oracle10g数据库PGA分配问题
- plSql问题
- 数据库数据丢失问题
- 有一个项目要把SQL Server2000数据库迁移到Oracle中
- 主表外键是NVARCHAR2,从表主键是VARCHAR2,他们的长度是一样的,可以关联起来吗?
- oracle分页
- 如何判断一个日期范围不在另一个日期范围之内
- Oracle数据库的读取如何保证实时性
- 做standby,复制数据文件的时候,primary需要shutdown吗?
- 谁能帮我优化一下这个oracle的sql语句?
- PL/SQL 求逆矩阵方法
with t1 as(
SELECT A.日期
,A.商品CD
,A.仓库
,SUM(NVL(A.实际在库数,0)) 实际在库数
,SUM(NVL(A.入库予定 ,0)) 入库予定
,SUM(NVL(A.入库确定 ,0)) 入库确定
,SUM(NVL(A.出庫予定 ,0)) 出庫予定
,SUM(NVL(A.出庫確定 ,0)) 出庫確定
FROM 入出库履历 A
GROUP BY A.日期
,A.商品CD
,A.仓库
)
SELECT
日期,
商品CD,
实际在库数,
sum( 入库予定+入库确定-出庫予定-出庫確定 )over(ORDER BY 商品CD,仓库 rows between 1 preceding and current row) 调整数,
入库予定,
入库确定,
出庫予定,
出庫確定
FROM t1
WHERE 实际在库数<>0
UNION
SELECT
日期,
商品CD,
实际在库数,
0 调整数,
入库予定,
入库确定,
出庫予定,
出庫確定
FROM t1
WHERE 实际在库数=0;
A.日期
,A.商品CD
,A.仓库
,NVL(SUM(A.实际在库数),0) 实际在库数
,NVL(SUM(A.入库予定),0)+NVL(SUM(A.入库确定),0)-NVL(SUM(A.出庫予定),0)-NVL(SUM(A.出庫確定),0) 调整数
,SUM(A.入库予定) 入库予定
,SUM(A.入库确定) 入库确定
,SUM(A.出庫予定) 出庫予定
,SUM(A.出庫確定) 出庫確定
FROM 入出库履历 A
GROUP BY A.日期 ,A.商品CD ,A.仓库 order by A.商品CD,A.仓库
2. (SELECT 1 FROM 入出库履历 WHERE 商品CD=C.商品CD AND
仓库=C.仓库 AND 日期>=C.日期 AND 日期<A.日期 AND 实际在库数<>0)
AND C.日期<=A.日期
AND C.商品CD = A.商品CD
AND C.仓库 = A.仓库)
修改为
(SELECT 1 FROM 入出库履历 WHERE 商品CD=C.商品CD AND
仓库=C.仓库 AND 日期 between C.日期 AND A.日期 AND 实际在库数 != 0)
AND C.日期<=A.日期
AND C.商品CD = A.商品CD
AND C.仓库 = A.仓库)
SQL写好了,然后再考虑oracle SQL执行计划的优化。