【发布时间】:2015-09-23 14:29:37
【问题描述】:
表格 PURCHASE(PDate, ItemName, PQty, Rate)
PDate | ItemName | PQty | Rate
============================================
01-04-2015 | Mobile Phone | 06 | 05,000
01-04-2015 | Laptop | 07 | 30,000
03-04-2015 | Mobile Phone | 03 | 06,000
04-04-2015 | Mobile Phone | 08 | 07,000
04-04-2015 | Laptop | 03 | 40,000
05-04-2015 | Mobile Phone | 05 | 04,000
表格 SALES(SDate, ItemName, SQty)
SDate | ItemName | SQty
=================================
02-04-2015 | Mobile Phone | 02
03-04-2015 | Laptop | 03
03-04-2015 | Mobile Phone | 05
04-04-2015 | Mobile Phone | 07
04-04-2015 | Laptop | 03
06-04-2015 | Laptop | 02
SQL
- 这里我们需要在售后查看采购表中的剩余商品及其库存价值(PQty*Rate)。 (收盘)
- 选择查询应在此处执行该过程。
- PURCHASE表的PQty应该一个一个,从上到下根据SALES按PDate的升序扣除表格的 SQty 一个接一个,从上到下按日期升序排列。
- PURCHASE Table 的 PQty 不应变为 0(零),这是当然的。
- 如果 PQty 达到零,则从列表中 PURCHASE Table's PQty 的下一行中扣除 SALES 的剩余 SQty。
- 如果没有更多行可用,最后一行可能为负值。
- 表之间的条件已完成WHERE SALES.ItemName LIKE PURCHASE.ItemName
表格 EXPECTED SELECT QUERY RESULT (Date, ItemName, Qty, Rate, ProductValue)
PDate | ItemName | PQty | Rate | ProductValue
===========================================================
01-04-2015 | Mobile Phone | 00 | 05,000 | 0.00
01-04-2015 | Laptop | 00 | 30,000 | 0.00
03-04-2015 | Mobile Phone | 00 | 06,000 | 0.00
04-04-2015 | Mobile Phone | 03 | 07,000 | 21,000.00
04-04-2015 | Laptop | 02 | 40,000 | 80,000.00
05-04-2015 | Mobile Phone | 05 | 04,000 | 20,000.00
我该如何解决这个问题?
【问题讨论】:
-
能否提供可消费格式的ddl和样本数据? sqlfiddle.com 将是一个不错的起点。另外,定义“从上到下”。顺序是什么?您提供的数据中似乎没有任何内容来获取发布的行顺序。这听起来可能是一个运行中的总问题,因此 sql server 的版本也很重要,因为在 sql 2012 之前和之后执行此操作的方法差异很大。
-
从上到下是日期的 ASC 顺序。问题已编辑。
-
结果表前 3 行的 Qty 和 ProductValue 中的零是什么意思?
-
一旦购买了产品,它们就会被添加到 PURCHASE 表中。当商品售出时,它们会按日期从 PURCHASE 表中扣除。 PURCHASE 的前三行为零,因为这些商品已售出。
-
@shibormot,如果您在销售表中看到 - 已售出 14 部手机和 8 部笔记本电脑。因此,前 2 排手机(6+3)和第 4 排的 5 部手机已售出。共售出 8 台笔记本电脑,排在第 2 排,即笔记本电脑 0 数量和第 5 排 2。
标签: sql sql-server select inner-join inventory-management