如何创建存储过程来计算年初库存,库存,缺货,库存余额在SQL Server 2005中

如何创建存储过程来计算年初库存,库存,缺货,库存余额在SQL Server 2005中

问题描述:

我有3个表:如何创建存储过程来计算年初库存,库存,缺货,库存余额在SQL Server 2005中

  • ProductProduct_Model, Product_Color, Product_Code
  • StockInStockIn_Date, Product_Code, Product_SerialNo
  • StockOutStockOut_Date, Product_SerialNo

我想创建一个存储过程来生成报告requiremen下面吨字段:

  • (开始stockstock instock outstock balance
  • 组由(Product_ModelProduct_ColorProduct_Code
  • 过滤器的2个参数:@StartDate@EndDate

如何使用此方案创建存储过程?

假设你的表StockIn缺货有一列金额,而不是问题是毫无意义的。

因此,丑陋的和简单的查询是:

SELECT 
    BeginningStockIn 
    IsNull(BeginningStockIn.Amount, 0)-IsNull(BeginningStockOut.Amount, 0) BeginningStock, 
    IsNull(PeriodStockIn.Amount, 0) StockIn, 
    IsNull(PeriodStockOut.Amount, 0) StockOut, 
    IsNull(BeginningStockIn.Amount, 0)-IsNull(BeginningStockOut.Amount, 0)+IsNull(PeriodStockIn.Amount, 0)-IsNull(PeriodStockOut.Amount, 0) StockBalance 
FROM Product 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date < @StartDate 
) BeginningStockIn ON BeginningStockIn.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockOut 
    WHERE StockOut_Date < @StartDate 
) BeginningStockOut ON BeginningStockOut.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date >= @StartDate AND StockIn_Date < @EndDate 
) PeriodStockIn ON PeriodStockIn .Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockOut 
    WHERE StockOut_Date >= @StartDate AND StockOut_Date < @EndDate 
) PeriodStockOut ON PeriodStockOut.Product_Code = Product.Product_Code 

而且答案 - 创造您必须使用CREATE PROCEDURE语句描述here

CREATE PROC YourProcName 
    @StartDate datetime, 
    @EndDate datetime 
AS 
BEGIN 
    SET NOCOUNT ON; 

    the query 

END 
+0

感谢Oleg Dok的回复。我的情况是:Product_SerialNo是唯一的。所以我将其设置为库存,意味着如果他们库存有1个Product_SerialNo =它有1个库存产品。对于初始股票意味着从激光可用的股票余额(它应该是 Sokea 2012-01-17 06:46:25

+0

@Sokea你看到的草案 - 尝试采用它到您的需求 – 2012-01-17 07:19:21

小时的存储过程,

所有功劳归于Oleg Dok谁发布了上面的脚本。

这里是相同的数据我一起工作:

enter image description here


这里是代码:

declare @startdate date = '2012-01-02' 
declare @enddate date = '2012-01-31' 

SELECT 
    Product.Product_Code, 
    Product.Product_Color, 
    Product.Product_Model, 
    IsNull(BeginningStockIn.Amount, 0)-IsNull(BeginningStockOut.Amount, 0) BeginningStock, 
    IsNull(PeriodStockIn.Amount, 0) StockIn, 
    IsNull(PeriodStockOut.Amount, 0) StockOut, 
    IsNull(BeginningStockIn.Amount, 0)-IsNull(BeginningStockOut.Amount, 0)+IsNull(PeriodStockIn.Amount, 0)-IsNull(PeriodStockOut.Amount, 0) StockBalance 
FROM Product 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date < @StartDate 
    group by Product_Code 
) BeginningStockIn ON BeginningStockIn.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockOut 
    WHERE StockOut_Date < @StartDate 
    group by Product_Code 
) BeginningStockOut ON BeginningStockOut.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date >= @StartDate AND StockIn_Date < @EndDate 
    group by Product_Code 
) PeriodStockIn ON PeriodStockIn .Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockOut 
    WHERE StockOut_Date >= @StartDate AND StockOut_Date < @EndDate 
    group by Product_Code 
) PeriodStockOut ON PeriodStockOut.Product_Code = Product.Product_Code 

这里是输出:

Product_Code Product_Color Product_Model BeginningStock StockIn StockOut StockBalance 
1 red 123 5 0 3 2 
2 red 456 10 0 3 7 

是这是你想要的吗?

+0

谢谢赛义德拉赫曼,但在我的情况下,我控制股票交易Product_SerialNo,因为它是唯一的,而不是金额。恩。在StockIn中我有Product_SerialNo:12345,如果12345没有在StockOut表示它有1个库存。 – Sokea 2012-01-17 07:20:13