一個簡單進銷存系統按日的庫存
轉載請註明出處,聯繫我: [email protected]
本人熱衷於數據庫技術及算法的研究,志同道合之士, 歡迎探討
一下是數據庫表結構
以下是結果
ALTER PROC dbo.proc_StokcWithDate
@StartDate DATE,
@EndDate DATE,
@PartNumQuery NVARCHAR(200)
AS
BEGIN
SELECT
tt.Date
,CAST(0 AS DECIMAL(18, 5)) AccInQty
,CAST(0 AS DECIMAL(18, 5)) AccOutQty
,CAST(0 AS DECIMAL(18, 5)) Balance INTO #StockWithDate
FROM dbo.TQPartTran tt
WHERE 1 = 2;
DECLARE @EveryDate DATE = @StartDate;
DECLARE @i2 INT = 0;
WHILE @EveryDate < @EndDate
BEGIN
SELECT
@EveryDate = DATEADD(DAY, @i2, @StartDate)
INSERT INTO #StockWithDate ([Date])
VALUES (@EveryDate);
SET @i2 = @i2 + 1;
END
SELECT DISTINCT
tt.PartNum INTO #PartNum
FROM dbo.TQPartTran tt;
IF LEN(@PartNumQuery) > 0
BEGIN
TRUNCATE TABLE #PartNum;
INSERT INTO #PartNum (PartNum)
VALUES (@PartNumQuery);
END
SELECT
ROW_NUMBER() OVER (ORDER BY swd.Date, pn.PartNum) ID
,pn.PartNum
,swd.* INTO #BaseInfo
FROM #StockWithDate swd
,#PartNum pn;
CREATE INDEX BaseInfoIndex ON #BaseInfo (ID);
DECLARE @PartNum NVARCHAR(200)
,@Date DATE;
DECLARE @i INT = 1
,@n INT = 0;
SELECT
@n = COUNT(ID)
FROM #BaseInfo bi;
WHILE @i <= @n
BEGIN
SELECT
@PartNum = bi.PartNum
,@Date = bi.Date
FROM #BaseInfo bi
WHERE bi.ID = @i;
UPDATE #BaseInfo
SET AccInQty = (SELECT
SUM(tt.Qty)
FROM TQPartTran tt
WHERE tt.PartNum = @PartNum
AND tt.Date <= @Date
AND tt.TranType = 'PUR-STK')
,AccOutQty = (SELECT
SUM(tt.Qty)
FROM TQPartTran tt
WHERE tt.PartNum = @PartNum
AND tt.Date <= @Date
AND tt.TranType = 'STK-CUS')
WHERE ID = @i;
SET @i = @i + 1;
END
UPDATE #BaseInfo
SET AccInQty = 0
WHERE AccInQty IS NULL;
UPDATE #BaseInfo
SET AccOutQty = 0
WHERE AccOutQty IS NULL;
UPDATE #BaseInfo
SET Balance = AccInQty - AccOutQty;
IF LEN(@PartNumQuery) > 0
BEGIN
SELECT
bi.ID 序號
,bi.PartNum 料號
,bi.Date 日期
,CAST(bi.AccInQty AS DECIMAL(18, 2)) 累計入庫
,CAST(bi.AccOutQty AS DEC(18, 2)) 累計出庫
,CAST(bi.Balance AS DEC(18, 2)) 結餘
FROM #BaseInfo bi
WHERE bi.PartNum = @PartNumQuery
ORDER BY bi.Date, bi.PartNum;
END
ELSE
BEGIN
SELECT
bi.ID 序號
,bi.PartNum 料號
,bi.Date 日期
,CAST(bi.AccInQty AS DECIMAL(18, 2)) 累計入庫
,CAST(bi.AccOutQty AS DEC(18, 2)) 累計出庫
,CAST(bi.Balance AS DEC(18, 2)) 結餘
FROM #BaseInfo bi
END
DROP TABLE #PartNum;
DROP TABLE #StockWithDate;
DROP TABLE #BaseInfo;
END
--exec proc_StokcWithDate '2020-05-8','2020-05-13',N''
--exec proc_StokcWithDate '2020-05-8','2020-05-13',''
--exec proc_StokcWithDate '2020-05-8','2020-05-13',N''
--exec proc_StokcWithDate '2020-05-8','2020-05-13',''
GO