我的表格包含不同类型产品的当前库存,位置和成本。
我打算创建一个视图,在每天结束时将这些数据合并,以便每天保存我的库存历史,如下所示:
opening stock (of yesterday) --- Sales ---- Closing Stock (today)
但我不知道实现此目的的最佳方法是什么,以及避免数据重复。我正在使用SQL Server,但我对它不是很熟悉。
答案 0 :(得分:0)
我可以通过以下步骤进行说明,我假设您的表是使用主键定义的,以消除重复记录更新。
CREATE TABLE TransactionHistory(
ProductNo varchar(10) not null
,Product_name varchar(100) not null
,TransactionDate Date
,SalesValue float
CONSTRAINT [Pk_product] PRIMARY KEY CLUSTERED
(
productno asc
,product_name asc
,transactionDate asc
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
- 立即创建视图以将数据插入表格
Create View Vw_TransactionHistory
as
select
ProductNo
,Product_name
,TransactionDate
,SalesValue
from salesTable
where transactiondate = getdate ()-15
GO
所以,查看最近15天的数据或者您可以将其更改为getdate()或getdate() - 1
- 第3步现在,创建一个更新记录或插入新记录的合并程序
CREATE PROCEDURE usp_transactionHistory
AS
BEGIN
MERGE dbo.TransactionsHistory AS TARGET
USING Vw_TransactionHistory AS SOURCE
ON (
TARGET.ProductNo = SOURCE.ProductNo
AND TARGET.Product_name = source.Product_name
AND TARGET.TransactionDate = SOURCE.TransactionDate
AND TARGET.SalesValue = SOURCE.SalesValue
)
WHEN MATCHED
THEN
UPDATE
SET TARGET.ProductNo = SOURCE.ProductNo
,TARGET.Product_name = source.Product_name
,TARGET.TransactionDate = SOURCE.TransactionDate
,TARGET.SalesValue = SOURCE.SalesValue
WHEN NOT MATCHED BY TARGET
THEN
INSERT (
ProductNo
,Product_name
,TransactionDate
,SalesValue
)
VALUES (
SOURCE.ProductNo
,SOURCE.Product_name
,SOURCE.TransactionDate
,SOURCE.SalesValue
);
END
GO