向现有查询中添加查询以显示剩余库存将在下个月增加

时间:2018-08-01 03:02:36

标签: sql sql-server

SELECT Date,vendorCustomer,InvoiceNo,ClosingStock
FROM
(
SELECT *,StockBalancekg + Tankkg AS ClosingStock,
ROW_NUMBER() OVER (PARTITION BY DATEDIFF(mm,0,Date) ORDER BY Date DESC,InvoiceNo DESC) AS Seq
FROM ChandraLog.dbo.Log
)t
WHERE Seq = 1

在上面的查询中,获取月末的期末存货状况良好。我需要从关闭库存开始的每个月初的库存。 我查询到如何将查询实现为上述查询。

select  OpeningStock = LAG(ClosingStock) OVER (ORDER BY  Date  ) ,ClosingStock
from   ChandraLog.dbo.Log

有人可以指导我吗? 源表sql:

Create Table Log(TDate Date, Customer varchar(55),InvoiceNo float,
StockBalance float,Tankkg float, StockBalancekg float);
INSERT INTO  Log(TDate, Customer,InvoiceNo,StockBalance,Tankkg,StockBalancekg) VALUES  
    ('2017/11/29','Lee Oil Mil Sdn bhd',413,5000,45267,15011)
   ,('2017/11/30','Production',416,4300,9567,24701)
   ,('2017/11/30','Jaya Utara Multitrade',421,4000,6511,9567)
   ,('2017/12/27','Melata Sdn Bhd',422,3500,23237,26061)
   ,('2017/12/30','Inayu Global Sdn Bhd',438,2000,22897,221)
   ,('2017/12/31','Usaha Edar Sdn Bhd',440,1000,13547,221)
   ,('2018-05-01','Production',NULL,500,3621,10147)
   ,('2018-02-22','Golden Planet Resources',458,400,4196,5032)
   ,('2018-02-22','Pasar Raya Mariana',459,300,4196,1632)

1 个答案:

答案 0 :(得分:0)

这是您要实现的目标吗?

DECLARE @Log TABLE ( TDate Date, Customer varchar(55), InvoiceNo float, StockBalance float, Tankkg float, StockBalancekg float );
INSERT INTO  @Log ( 
    TDate, Customer,InvoiceNo,StockBalance,Tankkg,StockBalancekg 
)
VALUES  
('2017/11/29','Lee Oil Mil Sdn bhd',413,5000,45267,15011)
,('2017/11/30','Production',416,4300,9567,24701)
,('2017/11/30','Jaya Utara Multitrade',421,4000,6511,9567)
,('2017/12/27','Melata Sdn Bhd',422,3500,23237,26061)
,('2017/12/30','Inayu Global Sdn Bhd',438,2000,22897,221)
,('2017/12/31','Usaha Edar Sdn Bhd',440,1000,13547,221)
,('2018-05-01','Production',NULL,500,3621,10147)
,('2018-02-22','Golden Planet Resources',458,400,4196,5032)
,('2018-02-22','Pasar Raya Mariana',459,300,4196,1632);

-- fetch opening / closing stock --

SELECT 
    t.TDate, t.Customer, t.InvoiceNo, o.OpeningStock, t.ClosingStock
FROM
(
    SELECT 
        *
        , ( StockBalancekg + Tankkg ) AS ClosingStock
        , DATEDIFF( mm, 0, TDate ) AS DatePartition
        , ROW_NUMBER() OVER ( PARTITION BY DATEDIFF( mm, 0, TDate ) ORDER BY TDate DESC, InvoiceNo DESC ) AS Seq
    FROM @Log
) t
CROSS APPLY (
    SELECT TOP 1 StockBalancekg AS OpeningStock FROM @Log WHERE DATEDIFF( mm, 0, TDate ) = t.DatePartition ORDER BY InvoiceNo
) o
WHERE Seq = 1

返回

+------------+-----------------------+-----------+--------------+--------------+
|   TDate    |       Customer        | InvoiceNo | OpeningStock | ClosingStock |
+------------+-----------------------+-----------+--------------+--------------+
| 2017-11-30 | Jaya Utara Multitrade | 421       |        15011 |        16078 |
| 2017-12-31 | Usaha Edar Sdn Bhd    | 440       |        26061 |        13768 |
| 2018-02-22 | Pasar Raya Mariana    | 459       |         5032 |         5828 |
| 2018-05-01 | Production            | NULL      |        10147 |        13768 |
+------------+-----------------------+-----------+--------------+--------------+