今天为完成客户成品仓盘点的统计功能,做了盘点统计表,这个功能有点复杂,要将生产数据与库存的差异做成一个统计报表,报表要反映出差异的明细。

其实,这个项目拖了也挺久了,本来客户计划用于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()的使用相关推荐

  1. 鼎信诺oracle取数步骤,鼎信诺审计软件常见问题

    (1)在前端取数文件夹sjinputv3.2下找到相应类型的Excel手工取数模板文件,复制并保存至自己知道的一个目录下,然后在复制出的文件中进行编辑. 文件名分别如下: 序号 文 件 名 应用范围 ...

  2. mysql从oracle取数_Oracle通过过程定期取数

    ---oracle调试: set serveroutput on; sho errorsset autotrace on;select text from user_source where name ...

  3. oracle取数工具网盘,转:数据库sql取数工具

    功能:从各种数据库中取数,通过SQL脚本查询出数据,将数据直接输出到EXCEL.也可以直接中从EXCEL中取数. 环境要求:安装了相应数据库的客户端. 技能要求:会写基本的SQL脚本.不会的参考雪山飞 ...

  4. java oracle查询结果list取数,Oracle函数返回Table集合

    Oracle table()函数查询函数返回的结果集 2015年12月13日 22:42:51 warrenjiang 阅读数:7452 版权声明:本文为博主原创文章,未经博主允许不得转载. http ...

  5. 微信小程序从oracle取数,微信小程序 取随机数

    第一思路 如:现在要从50 ran.Next(1,50)生成的是1-50的随机数+50 结束 第二思路 Math.random()的取值范围是: 0<=Math.random()<1  随 ...

  6. oracle 取当天,Oracle获取当天,当月,当年的数据

    1. 当天 createdtime 参数 select? * from tablename t?where where trunc(sysdate)=trunc(t.createdtime); 2.当 ...

  7. Oracle SQL高级编程——分析函数(窗口函数)全面讲解

    Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...

  8. oracle 会话数上不去_Oracle初识

    1.基本概念 oracle数据库是一个物理概念,oracle实例是数据库在内存中的镜像,属于一种逻辑概念. oracle数据库与oracle实例至少是一对一的关系,也可能是一对多关系(oracle集群 ...

  9. 细数oracle的异常

    1.首先是oracle自身的异常抛出 目录 1.首先是oracle自身的异常抛出 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超 ...

最新文章

  1. 分析递归函数的时间复杂度
  2. Spring Security学习
  3. 算法:回溯十六 Add and Search Word添加并查找单词
  4. windows安装fiddler
  5. 联想7400一体机加粉后粉盒重置归零方法
  6. 白话前沿IT技术系列—云计算
  7. 批量提取PPT里面包含的图片教程
  8. python中年大叔学编程_中年大叔学编程-我用Python保存金山词霸每日一句
  9. autojs教程:贝壳赚app脚本代码
  10. unityshader 晶格化消散
  11. Ubuntu 10.4 .安装Cairo-dock
  12. .php on line 0,PHP Fatal error: Could not queue new timer in Unknown on line 0
  13. java实现12小时制和24小时制的时间
  14. [计算机动画]Games103-作业1-刚体动画
  15. 小白要搭建电商系统,看看这个开源项目!
  16. webrtc代码走读二十一(InterArrival::ComputeDeltas)
  17. 真实生活的记录:我三年的外企生涯(9) 出处:天涯虚拟社区
  18. wlan从入门到精通第三期 WLAN标准协议
  19. 电脑蓝屏0x0000007B
  20. 股票期权行权是什么意思?

热门文章

  1. (三)ElasticSearch的基本概念
  2. 【软件开发底层知识修炼】十二 C/C++语言中内嵌汇编语言(asm)
  3. 2019湖南多校第三场
  4. 07.用户故事与敏捷方法——优秀用户故事准则笔记
  5. 常见三种字符编码的区别:ASCII、Unicode、UTF-8
  6. 移动端弹出层加遮罩后禁止滑动
  7. android 请求网络异步载入
  8. [转载]细说Java反射
  9. 从零开始学习jQuery (三) 管理jQuery包装集【转】
  10. PPC(Pocket PC)中显示二进制数组(byte[])类型的图片