2015-09-23 23 views
0

PURCHASE(PDate, ItemName, PQty, Rate)SQL服务器:与计算的行一个选择查询后,另一

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 *费率)购买表售后。 (完成库存
  • 选择查询应该在这里执行该过程。
  • 购买表的PQty应该由一个,前一个热门升序扣除一到底部的基础上,SALES表的 SQty 一个PDATE的升序底部的日期。
  • PQty 购买表不应该成为0(零)这是当然。
  • 柜面,如果PQty达到零,从购表人的 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 

我怎样才能理清这个问题?

+0

您能否提供消耗品格式的ddl和样品数据? sqlfiddle.com将是一个很好的开始。另外,定义“从上到下”。订单是什么?您提供的数据中没有任何内容可以获取发布的行的顺序。这听起来像它可能是一个正在运行的总问题,所以sql服务器的版本也将是重要的,因为在sql 2012之前和之后的做法差别很大。 –

+0

从上到下是ASC订单日期。问题被编辑。 –

+0

结果表中前3行的数量和ProductValue是什么意思? – shibormot

回答

0
SELECT PDate, ItemName, MPQty, PQty, ISNULL(SQty,0) AS SQty, 
ISNULL((CASE WHEN SQTY>=PQty THEN 0 WHEN (SQty+MPQty)>PQty THEN PQty-SQty ELSE MPQty END),0) AS Qty, Rate, 
(ISNULL((CASE WHEN SQTY>=PQty THEN 0 WHEN (SQty+MPQty)>PQty THEN PQty-SQty ELSE MPQty END),0)*Rate) AS PValue FROM 
(SELECT P.PDate AS PDate, P.ItemName AS ItemName, P.PQty AS MPQty, 
(SELECT SUM(P1.PQty) FROM PURCHASE P1 WHERE P1.ItemName=P.ItemName AND P1.PDate<=P.PDate) AS PQty, 
(SELECT SUM(S1.SQty) FROM SALES S1 WHERE S1.ItemName=P.ItemName) AS SQty,  
P.Rate AS Rate FROM PURCHASE P)X ORDER BY Pdate