月头月尾oracle取数,Oracle分析函数Over()的使用
今天为完成客户成品仓盘点的统计功能,做了盘点统计表,这个功能有点复杂,要将生产数据与库存的差异做成一个统计报表,报表要反映出差异的明细。
其实,这个项目拖了也挺久了,本来客户计划用于2018年终盘点,不过,后来管理层作出决定,认为年终盘点启动一个新项目的有风险,所以,项目交期延长,改为了今年的季度盘点,即3月底的盘点,现在已经3月份了,项目要尽快完成,以便客户使用。
为了实际统计报表一目了然的效果,必须显示生产型号、WIP结存、库存数(包括:货架,尾数架及尾数框),重点是显示差异的明细。在做报表过程,查询了很多关于ORACLE的函数,其中对于分析函数Over()还是第一次使用,该函数功能强大,特别适合使用于数据统计方面。
over()函数写法over(partition by expr2 order by expr3),根据expr2对结果进行分区,在各分区内按照expr3进行排序;
over函数不能单独使用,需要与row_number(),rank()和dense_rank,lag()和lead(),sum()等配合使用。
这三个函数与over连用时order by 不能丢失,不写partition by时默认结果集为一整个分区。
row_number()与over(partition exp2 order by exp3)配合使用可以对分区根据exp1进行排序,此排序是从1开始,即使遇到相同的数据,也区分开来排序。
我写的盘点统计SQL如下:
CREATE OR REPLACE VIEW BARCODE_FG_CHECK_STOCK_AL AS
SELECT S.EDITION AS 盘点版本,
S.SOURCE_CPN AS 型号,
S.QTY AS 盘点总数,
NVL(W.QTY, 0) AS WIP数量,
S.QTY – NVL(W.QTY, 0) AS 差异,
S.SHELF_ID AS 货架编号,
S.SHELF_ID_BACKLOG AS 货架数量,
S.MANTISSA_SHELF_ID AS 尾数架编号,
S.MANTISSA_SHELF_ID_BACKLOG AS 尾数架数量,
S.MANTISSA_CABINET_ID AS 尾数柜编号,
S.MANTISSA_CABINET_ID_BACKLOG AS 尾数柜数量
FROM (SELECT A.EDITION,
A.SOURCE_CPN,
A.QTY,
B.SHELF_ID,
B.SHELF_ID_BACKLOG,
B.MANTISSA_SHELF_ID,
B.MANTISSA_SHELF_ID_BACKLOG,
B.MANTISSA_CABINET_ID,
B.MANTISSA_CABINET_ID_BACKLOG
FROM (SELECT V.EDITION,
M.SOURCE_CPN,
SUM(M.SHELF_ID_BACKLOG) +
SUM(M.MANTISSA_SHELF_ID_BACKLOG) +
SUM(M.MANTISSA_CABINET_ID_BACKLOG) AS QTY
FROM BARCODE_FG_INVENTORY M, BARCODE_FG_INVENTORY_VER V
WHERE M.VER_PTR = V.PKEY
GROUP BY V.EDITION, M.SOURCE_CPN) A,
(select BARCODE_FG_CHECK_STOCK_ALL.SOURCE_CPN,
DECODE(row_number()
OVER(partition by SOURCE_CPN,SHELF_ID ORDER BY SOURCE_CPN),
1,
SHELF_ID) SHELF_ID,
DECODE(row_number() OVER(partition by SOURCE_CPN,SHELF_ID_BACKLOG
ORDER BY SOURCE_CPN),
1,
SHELF_ID_BACKLOG) SHELF_ID_BACKLOG,
DECODE(row_number()
OVER(partition by SOURCE_CPN,MANTISSA_SHELF_ID ORDER BY
SOURCE_CPN),
1,
MANTISSA_SHELF_ID) MANTISSA_SHELF_ID,
DECODE(row_number()
OVER(partition by SOURCE_CPN,MANTISSA_SHELF_ID_BACKLOG
ORDER BY SOURCE_CPN),
1,
MANTISSA_SHELF_ID_BACKLOG) MANTISSA_SHELF_ID_BACKLOG,
DECODE(row_number()
OVER(partition by SOURCE_CPN,MANTISSA_CABINET_ID ORDER BY
SOURCE_CPN),
1,
MANTISSA_CABINET_ID) MANTISSA_CABINET_ID,
DECODE(row_number()
OVER(partition by SOURCE_CPN,MANTISSA_CABINET_ID_BACKLOG
ORDER BY SOURCE_CPN),
1,
MANTISSA_CABINET_ID_BACKLOG) MANTISSA_CABINET_ID_BACKLOG
from BARCODE_FG_CHECK_STOCK_ALL) B
WHERE A.SOURCE_CPN = B.SOURCE_CPN) S,
(SELECT CPN, SUM(QTY_BACKLOG_UNIT) AS QTY
FROM (SELECT SUBSTR(DATA0050.CUSTOMER_PART_NUMBER, 1, 7) AS CPN,
DATA0056.QTY_BACKLOG_UNIT
FROM DATA0056, DATA0006, DATA0050, DATA0034
WHERE DATA0056.WO_PTR = DATA0006.PKEY
AND DATA0006.CUST_PART_PTR = DATA0050.PKEY
AND DATA0056.DEPT_PTR = DATA0034.PKEY
AND DATA0056.QTY_BACKLOG > 0
AND DATA0034.DEPT_CODE = ’24′)
GROUP BY CPN) W
WHERE S.SOURCE_CPN = W.CPN(+)
ORDER BY S.EDITION, S.SOURCE_CPN;
当然,这个并非最终版本,虽然功能都已经实际,不过,对于同一型号有多个货架与多个尾数架的数据时,可能会存在统计不准,这个需要再测试,以后完成盘点功能后再发一个牌本吧。
等等,别走! ^_^
好消息,快手官方发红包啦,登录即送2元,秒提现! 查看详情>>
月头月尾oracle取数,Oracle分析函数Over()的使用相关推荐
- 鼎信诺oracle取数步骤,鼎信诺审计软件常见问题
(1)在前端取数文件夹sjinputv3.2下找到相应类型的Excel手工取数模板文件,复制并保存至自己知道的一个目录下,然后在复制出的文件中进行编辑. 文件名分别如下: 序号 文 件 名 应用范围 ...
- mysql从oracle取数_Oracle通过过程定期取数
---oracle调试: set serveroutput on; sho errorsset autotrace on;select text from user_source where name ...
- oracle取数工具网盘,转:数据库sql取数工具
功能:从各种数据库中取数,通过SQL脚本查询出数据,将数据直接输出到EXCEL.也可以直接中从EXCEL中取数. 环境要求:安装了相应数据库的客户端. 技能要求:会写基本的SQL脚本.不会的参考雪山飞 ...
- java oracle查询结果list取数,Oracle函数返回Table集合
Oracle table()函数查询函数返回的结果集 2015年12月13日 22:42:51 warrenjiang 阅读数:7452 版权声明:本文为博主原创文章,未经博主允许不得转载. http ...
- 微信小程序从oracle取数,微信小程序 取随机数
第一思路 如:现在要从50 ran.Next(1,50)生成的是1-50的随机数+50 结束 第二思路 Math.random()的取值范围是: 0<=Math.random()<1 随 ...
- oracle 取当天,Oracle获取当天,当月,当年的数据
1. 当天 createdtime 参数 select? * from tablename t?where where trunc(sysdate)=trunc(t.createdtime); 2.当 ...
- Oracle SQL高级编程——分析函数(窗口函数)全面讲解
Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...
- oracle 会话数上不去_Oracle初识
1.基本概念 oracle数据库是一个物理概念,oracle实例是数据库在内存中的镜像,属于一种逻辑概念. oracle数据库与oracle实例至少是一对一的关系,也可能是一对多关系(oracle集群 ...
- 细数oracle的异常
1.首先是oracle自身的异常抛出 目录 1.首先是oracle自身的异常抛出 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超 ...
最新文章
- 分析递归函数的时间复杂度
- Spring Security学习
- 算法:回溯十六 Add and Search Word添加并查找单词
- windows安装fiddler
- 联想7400一体机加粉后粉盒重置归零方法
- 白话前沿IT技术系列—云计算
- 批量提取PPT里面包含的图片教程
- python中年大叔学编程_中年大叔学编程-我用Python保存金山词霸每日一句
- autojs教程:贝壳赚app脚本代码
- unityshader 晶格化消散
- Ubuntu 10.4 .安装Cairo-dock
- .php on line 0,PHP Fatal error: Could not queue new timer in Unknown on line 0
- java实现12小时制和24小时制的时间
- [计算机动画]Games103-作业1-刚体动画
- 小白要搭建电商系统,看看这个开源项目!
- webrtc代码走读二十一(InterArrival::ComputeDeltas)
- 真实生活的记录:我三年的外企生涯(9) 出处:天涯虚拟社区
- wlan从入门到精通第三期 WLAN标准协议
- 电脑蓝屏0x0000007B
- 股票期权行权是什么意思?
热门文章
- (三)ElasticSearch的基本概念
- 【软件开发底层知识修炼】十二 C/C++语言中内嵌汇编语言(asm)
- 2019湖南多校第三场
- 07.用户故事与敏捷方法——优秀用户故事准则笔记
- 常见三种字符编码的区别:ASCII、Unicode、UTF-8
- 移动端弹出层加遮罩后禁止滑动
- android 请求网络异步载入
- [转载]细说Java反射
- 从零开始学习jQuery (三) 管理jQuery包装集【转】
- PPC(Pocket PC)中显示二进制数组(byte[])类型的图片