2017-06-12 6 views
0

さまざまな種類の製品、場所、コストの現在の在庫を含むテーブルがあります。ビューから自動的にデータを挿入

私は次のように毎日あたり私の株式の歴史を保つために、毎日の終わりに、このデータを結合するビューを作成することを計画しています:

opening stock (of yesterday) --- Sales ---- Closing Stock (today) 

しかし、私は何を知りませんこれを実装し、データの重複を避けるための最良の方法です。私はSQL Serverを使用していますが、あまりよく慣れていません。

+0

を挿入マージプロシージャを作成します*?ビューはデータベースにデータを追加せず、3つの異なる時点に存在するストックを返そうとしている場合、同じアイテムが3つ存在する場合は*複製が必要です。 – iamdave

+0

私はテーブルからのデータを見ることができます。それは売り上げのための特別な取引履歴のように見えます。私はこのデータをビューの新しいテーブルに入れて在庫の履歴を維持します。毎回すべてのレコードを取る必要はありません。私はそれがはっきりしていることを望む! –

+0

それから 'where'句を使用します...?私は個人的にはここでデータベース設計について考えることをお勧めします。それは非常に貧弱で標準的な正規化の原則に違反しているように思えます。 – iamdave

答えて

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 

から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 
関連する問題