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该不该存在这样的表?
- 这个命题sql语句怎么写?
- 请oralcel专家推荐一本 学习oracle经典书籍,多谢
- oracle,mysql迁移问题
- Open Cursor的问题。急,在线等!
- Modify SQL
- ORACLE数据库中INTERNAL自从改了密码后都得人工STARTUP 为何???
- 急!:谁知道在solaris英文版上装的ORACLE的字符集NLS_LANGUAGE是什么
- oracle rac 配置 virtual IP ,VIP 能在节点上PING通吗
- server 2008 oracle1521端口问题
- 谁能帮我优化一下这个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执行计划的优化。