繁体   English   中英

SQL Server:选择查询并在另一行上进行计算

[英]Sql Server : Select query with calculation on rows one after another

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)。 期末库存
  • 选择查询应在此处进行处理。
  • 购买表的PQty 应当从上到下日期升序基于销售表的 SQty 一个 PDATE的升序被扣除一个接一个从上到下
  • 当然, 购买表的数量不应变为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

我该如何解决这个问题?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM