Как создать хранимую процедуру для расчета начального запаса, наличия на складе, на складе, остатка на складе в SQL Server 2005 - PullRequest
0 голосов
/ 17 января 2012

У меня есть 3 таблицы:

  • Product (Product_Model, Product_Color, Product_Code)
  • StockIn (StockIn_Date, Product_Code, Product_SerialNo)
  • StockOut (StockOut_Date, Product_SerialNo)

Я хочу создать хранимую процедуру для создания отчета с полями требований ниже:

  • (начало stock, stock in, stock out,stock balance)
  • Группировка по (Product_Model, Product_Color, Product_Code)
  • Фильтр по 2 параметрам: @StartDate и @EndDate

Как создать хранимую процедуру с этим сценарием?

Ответы [ 2 ]

0 голосов
/ 17 января 2012

H,

Все благодарности Олегу Доку, который разместил сценарий выше.

Вот те же данные, с которыми я работаю:

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 голосов
/ 17 января 2012

Предполагая, что ваши таблицы StockIn и StockOut имеют столбец Сумма , вместо этого вопрос бессмысленный.

Итак, уродливый ипростой запрос:

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, как описано здесь

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

  the query

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...