22,206
社区成员
发帖
与我相关
我的任务
分享
-- 1.录入定单表
IF OBJECT_ID(N'tempdb..#定单表')IS NOT NULL
DROP TABLE #定单表
GO
CREATE TABLE #定单表
(
货品名 VARCHAR(11)
,规格 VARCHAR(11)
,单价 FLOAT
,数量 INT
,金额 FLOAT
,入库日期 DATE
,结算号 VARCHAR(11)
)
INSERT INTO #定单表 VALUES
('A货','A-1',20,5,100,'2018-1-1','P20180130'),
('A货','A-2',25,6,150,'2018-1-1','P20180130'),
('B货','B-1',50,8,400,'2018-1-1','P20180130'),
('A货','A-1',30,6,180,'2018-1-1','P20180130');
-- 2.由定单表生成结算表
IF OBJECT_ID('tempdb..#结算表') IS NOT NULL
DROP TABLE #结算表
GO
SELECT 结算号
, CAST('' AS VARCHAR(11)) AS 上次结算单号
, 货品名
, 规格
, 0 AS 期初数量
, SUM(数量) AS 增加数量
, 0 + SUM(数量) AS 结余数量
, 0 AS 期初金额
, SUM(金额) AS 增加金额
, 0 + SUM(金额) AS 结余金额
INTO #结算表
FROM #定单表
GROUP BY
结算号
, 货品名
, 规格;
-- 3.向结算表中录入新定单数据
WITH CTEB
AS
(
SELECT 'B货' AS 货品名
, 'B-1' AS 规格
, 40 AS 单价
, 5 AS 数量
, 200 AS 金额
,'2018-1-2' AS 入库日期
,'P20180201' AS 结算号
)
, CTEC
AS
(
SELECT CTEB.结算号 AS 结算号
, CTEA.结算号 AS 上次结算单号
, CTEB.货品名 AS 货品名
, CTEB.规格 AS 规格
, CTEA.结余数量 AS 期初数量
, CTEB.数量 AS 增加数量
, CTEA.结余数量 + CTEB.数量 AS 结余数量
, CTEA.结余金额 AS 期初金额
, CTEB.金额 AS 增加金额
, CTEA.结余金额 + CTEB.金额 AS 结余金额
FROM #结算表 AS CTEA
INNER JOIN CTEB
ON CTEA.货品名 = CTEB.货品名
AND CTEA.规格 = CTEB.规格
)
INSERT INTO #结算表
SELECT TOP 1 *
FROM CTEC
ORDER BY
上次结算单号 DESC;