先进先出的数据冲销处理(转邹健的个人空间)
--示例数据:
create table 销售订单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)
insert 销售订单
select 'A1','2005-5-1','ABCD',100 union all
select 'A2','2005-5-3','ABCD',200 union all
select 'A3','2005-5-4','ABCD',300 union all
select 'A4','2005-5-8','ABCD',500
create table 销售发货单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)
insert 销售发货单
select 'B1','2005-5-05','ABCD',250 union all
select 'B2','2005-5-07','ABCD',100 union all
select 'B3','2005-5-10','ABCD',150'
GO
问题描述:
对于示例数据中的销售订单和销售发货单,由于客户在做销售发货时无法指定本次是要发那一张订单的东西。所以销售订单无法与销售发货单关联。客户要求以先进先出的方式统计销售订单的执行情况。对于示例数据,要求结果如下:
单号 日期 货品编码 订单数量 发货数量 待执行数量
---------- ----------------- ------------- -------------- --------------- ------------------
A1 2005-05-01 ABCD 100 100 0
A2 2005-05-03 ABCD 200 200 0
A3 2005-05-04 ABCD 300 200 100
A4 2005-05-08 ABCD 500 0 500
合计 1100 500 600
--查询处理的过程
select
a.单号,a.日期,a.货品编码,
订单数量=a.数量,
发货数量=isnull(case when a.s数量<b.数量 then a.数量 else b.数量-a.p数量 end,0),
待执行数量=case when a.s数量<b.数量 then 0 else a.s数量-isnull(b.数量,a.p数量) end
into # from(
select 单号,日期=convert(char(10),日期,120),货品编码,
数量=sum(数量),
p数量=isnull((select sum(数量) from 销售订单
where 货品编码=a.货品编码
and(datediff(day,日期,min(a.日期))>0
or datediff(day,日期,min(a.日期))=0 and 单号<a.单号)),0),
s数量=isnull((select sum(数量) from 销售订单
where 货品编码=a.货品编码
and(datediff(day,日期,min(a.日期))>0
or datediff(day,日期,min(a.日期))=0 and 单号<=a.单号)),0)
from 销售订单 a
group by 单号,convert(char(10),日期,120),货品编码
)a
left join(
select 货品编码,数量=sum(数量)
from 销售发货单
group by 货品编码
)b on a.货品编码=b.货品编码
and a.p数量<b.数量
order by a.单号,a.日期,a.货品编码
select * from #
union all
select '','','合计',sum(订单数量),sum(发货数量),sum(待执行数量) from #
drop table #
转载于:https://www.cnblogs.com/acelove/archive/2009/11/12/1601749.html
先进先出的数据冲销处理(转邹健的个人空间)相关推荐
- 我做的邹健老师的sql练习题(含答案)
我做的邹健老师的sql练习题(含答案) --试题1.2(表的建立及原题请参考邹健老师的专栏:http://blog.csdn.net/zjcxc/) (注:邹健老师的专栏有部分答案有问题) SELEC ...
- LabVIEW处理阵列数据时如何避免占用多份内存空间
LabVIEW处理阵列数据时如何避免占用多份内存空间 在程序中使用一个阵列数据类型,执行时希望这个阵列数据只在内存占有一份空间.可以使用移位寄存器以及"Replace Array Subse ...
- mysql drop table 释放空间_MySQL删除数据几种情况以及是否释放磁盘空间【转】
MySQL删除数据几种情况以及是否释放磁盘空间: 1.drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ; 2.truncate table tabl ...
- 邹健写的公交车路线查询(包括转车近到远排列)。
之前做过,速度跟不上 --示例数据 create table Line(lineID int,state nvarchar(10),orderid int,primary ke ...
- 【邹健】Asp.net MVC Fckeditor的扩展(支持PV3及自动绑定)
Asp.net MVC Fckeditor的扩展(支持PV3及自动绑定) function StorePage(){d=document;t=d.selection?(d.selection.type ...
- 工行验证码自动识别》(邹健)二
上一篇 / 下一篇 2007-01-20 09:30:36 查看( 9 ) / 评论( 0 ) / 评分( 0 / 0 ) 以工行验证码为例: https://mybank.icbc.com.cn/ ...
- 今天早上看了一个邹健写的SQL,太牛了!!
--首先写一个函数,得到指定类别下的所有子类别 create function f_cid( @ClassName varchar(10) --要查询的类别名(如果类别名会重复,改用NClassID ...
- oracle导入备份失败怎么办,ORACLE 数据备份、恢复以及导入时表空间不存在的解决方案...
一.数据备份(导出) 1.exp命令导出dmp文件(exp -help查看帮助信息) 命令:exp username/userpasswd@orcl file=G:/test.dmp log=G:/t ...
- java数据段 静态区_linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
一)概述 .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储. .堆栈中存放的是函数中的局部变量,在函数的生命周期中可以将变量压入堆栈,编译器需要确保堆栈指针在函数退出前恢复到初始位置,也就是说 ...
最新文章
- 构建可扩展的GPU加速应用程序(NVIDIA HPC)
- 习题10-2 递归求阶乘和 (15 分)
- codeforces Gargari and Permutations(DAG+BFS)
- Android老項目出现javax/xml/bind/JAXBException异常问题解决
- 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程
- 20189216 2018-2019-2 《密码与安全新技术专题》第七次作业
- Online Learning场景下实时新闻热点机器学习训练实践
- java服务自动降级方案_在京东我们是如何做服务降级的
- 【python】解析Excel中使用xlrd库、xlwt库操作,使用xluils库修改Excel文件详解(三)...
- midaspay能删除吗_midasPay返回90009错误
- Git理论、原理、操作
- DataGrip使用: 表的数据迁移-数据导出sql和执行sql
- 【百度地图API】如何激发手机的高分辨率
- linux5 多用户模式,centos7设置以多用户模式启动
- 解决Linux下路径过长一行无法显示的问题
- 【文献翻译】基于CVSS的IT系统网络安全风险定量评估方法-A Quantitative CVSS-Based Cyber Security Risk Assessment Methodology
- 关闭打印机 文件共享的服务器,文件和打印机共享服务可以禁止?
- AtCoder Beginner Contest 258 A~Ex 题解
- linux逻辑卷管理的创建过程,LVM-逻辑卷管理器创建过程for linux
- 数学之路-python计算实战(4)-Lempel-Ziv压缩(1)
热门文章
- 怎样用计算机演示声音的波形,利用音频APP演示声音特性的创新实验——智能手机上的中学物理实验创新之一...
- 服务部署-Samba服务器
- 新eve_ng添加华三模版
- Java8中set转list
- Pandas快速入门
- iPhone 创新乏力?或许你忽略了苹果专利库的这些黑科技
- Cadence 元器件数据库_如何在cadence中做振荡器电路功能仿真
- 计算机启动和关闭方式,电脑WIN10如何关闭和打开服务的方法
- 13_Course Summary_宾夕法尼亚大学机器人运动规划专项课程【学习笔记】
- 关于STM32 RTC时钟使用内部/外部晶振的切换方法