私は次の手順で説明できます。私はあなたのテーブルが主キーで定義され、重複するレコードの更新を排除すると仮定します。
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
から1 - テーブルに
ので
Create View Vw_TransactionHistory
as
select
ProductNo
,Product_name
,TransactionDate
,SalesValue
from salesTable
where transactiondate = getdate()-15
GO
、ビューは、過去15日間のデータを見たり、(GETDATEし、それを変更することができます)またはGETDATE()のデータを挿入するために、今ビューを作成します。
今--3rdステップ、あなたは*重複を避けるとはどういう意味ですかレコードを更新したり、新しいレコード
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
を挿入マージプロシージャを作成します*?ビューはデータベースにデータを追加せず、3つの異なる時点に存在するストックを返そうとしている場合、同じアイテムが3つ存在する場合は*複製が必要です。 – iamdave
私はテーブルからのデータを見ることができます。それは売り上げのための特別な取引履歴のように見えます。私はこのデータをビューの新しいテーブルに入れて在庫の履歴を維持します。毎回すべてのレコードを取る必要はありません。私はそれがはっきりしていることを望む! –
それから 'where'句を使用します...?私は個人的にはここでデータベース設計について考えることをお勧めします。それは非常に貧弱で標準的な正規化の原則に違反しているように思えます。 – iamdave