2017-10-17 64 views
-1

我有一個數據,如下面,我想實現一個緩慢變化的維度-2重複數據在緩慢變化的維度型2使用MERGE語句

DECLARE @MYTABLE TABLE 
    (
     LocalID INT, 
     STDID INT, 
     MYDATE DATE, 
     SKU VARCHAR(100), 
     LOCALPRICE DECIMAL(8,2) 
    ) 

INSERT INTO @MYTABLE 
    SELECT 1000004, 1038, '2017-10-17',34106860642, 5215 UNION ALL 
    SELECT 1000004, 1038, '2017-10-17',34106860642, 5648 UNION ALL 
    SELECT 1000004, 1038, '2017-10-17',34106860642, 5615 UNION ALL 
    SELECT 1000004, 1038, '2017-10-17',34106860642, 5901 

但隨着數據的問題是:有是重複創建密鑰這是

LocalID, STDID, and SKU 

由於在關鍵合併語句產生錯誤複製一個組合時。

如何處理此類數據的同時執行SCD-TYPE 2? 2型

+0

你想擁有,而不是發生錯誤怎麼辦?你期望的結果是什麼? –

+0

@TabAlleman:如果任何改變它的價格應該創建一個新的行與狀態欄值爲1的活動行和舊行狀態更改爲0 –

+0

你怎麼知道哪一行是新行,這是舊的行?你點什麼? –

回答

0

漸變維度是當你不斷的尺寸和新的狀態的以前的狀態。爲了做到這一點,你必須有一個將它們彼此分開的列(關鍵列)。因此,您可以向維度表中添加一列ID,而不使用您正在使用的組合。或者添加一個額外的列,如版本或有效日期或類似的東西,並在密鑰中包含該列。根據您的需求,您可以使用與值版本列1,2,3,4一樣或有效的最新列(在這裏你可以看到,當變化發生的),或者當前列設置爲1,其他設置爲0 (但如果再次關鍵是僅基於你將有重複)

+0

如何添加row_number並將其用於鍵 類似於ROW_NUMBER()OVER(分區BY Localid,STDID,SKU ORDER BY Localid)AS行編號 不確定它是否可以工作 –

+0

我沒有安裝sql server當前安裝來測試確切的語法,但根據我的經驗,最簡單的解決方案是在維度的每一行都有一個主要的int鍵。然後在事實上你引用鍵,當你建立你在其他領域加入了數據集市和版本的例子。我的意思是不是ROW_NUMBER只需添加一列DIMENSION_ID INT IDENTITY(1,1)PRIMARY KEY –