[英]SSIS - Loop through columns
一段時間以來,我們一直在使用excel文件存儲購買數據。 該電子表格文件具有統一的結構。 因為它具有很多屬性,所以我只想列舉最重要的屬性。
在此Excel文件中,我們具有產品ID列,每種產品的尺寸以及每種產品ID和尺寸的組合的數量。
問題是,我們有幾家商店,每個商店每種產品收到不同數量的商品。 因此,在每個excel中,我們為每個商店都有一列,其中放置了從每個組合中訂購的數量。
因此,我想做的是遍歷每個商店的列,以將每種組合的相應數量添加到特定商店。
例如,
INSERT INTO MyTable (product_ID, size_ID, store_ID, quantity)
VALUES (12345, 34, Mirkwood, 1)
然后,對每列重復一次。
我一直在嘗試為此找到解決方案,但還沒有弄清楚。 我真的很感謝所有幫助或提示。
避免嘗試在SSIS中創建一些復雜的,動態的循環代碼。
拆分流會更簡單,因此您擁有一個商店的product_id
, size_id
和數據。 使用您已經知道的store_id
對每個商店執行插入操作。
雖然循環解決方案聽起來不錯,並且可能意味着添加新商店時不必更新代碼,但是在SSIS中,實現起來很復雜,我猜您不是在頻繁添加商店來創建新商店。努力值得。
您可以使用unpivot組件
選中的列將是您需要轉換為行的列。 目標列是將數據放入其中的列。數據透視鍵值列名稱:數據透視表列的名稱。
之后,您可以正常插入行。
另一種方法是使用sql,我在這里使用的是t-sql,但其他數據庫也應該有類似的東西。 首先將原始數據導入表中。 然后使用unpivot執行與上述類似的操作。
CREATE TABLE #pvt (VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO #pvt VALUES (1,4,3,5,4,4);
INSERT INTO #pvt VALUES (2,4,1,5,5,5);
INSERT INTO #pvt VALUES (3,4,3,5,4,4);
INSERT INTO #pvt VALUES (4,4,2,5,5,4);
INSERT INTO #pvt VALUES (5,5,1,5,5,5);
GO
select * from #pvt
--Unpivot the table.
SELECT VendorID, Employee, Orders – destination table, first column is row group?
FROM
(SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
FROM #pvt) p – detail source
UNPIVOT
(Orders FOR Employee IN –orders: data, For: column group
(Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
這種方法的唯一問題是,如果添加了更多的列(存儲),它將無法處理。 但您可以使其動態化: https : //www.mssqltips.com/sqlservertip/3002/use-sql-servers-unpivot-operator-to-dynamically-normalize-output/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.