2016-08-08 8 views
1

私はこれらの情報が列に行を結合(microsoff SSIS)

Contry | 2000 | 2001 | 2002 |2003 
---------------------------------- 
Tunisia | X1 | X2 | X3 |X4 
------------------------------------- 
Algeria | X21 | X22 | X23 |X24 
------------------------------------- 

を含むExcelファイルを持っていると私はSSISを使用しています。この

Tunisia 2000 X1 
-- 
Tunisia 2001 X2 
-- 
Tunisia 2002 X3 
-- 
Tunisia 2003 X4 
-- 
Algeria 2000 X21 
-- 
Algeria 2001 X22 
-- 
Algeria 2002 X23 
-- 
Algeria 2003 X24 

のようなデータベースでこれらの情報を保存したいです私はほとんどのコンポーネントで初心者です。 ありがとう

+1

SQLサーバーピボットを検索してみてください.... – Tanner

+1

をすべてのためのユーチューブのビデオが今あります。実際に**アンピボット**が必要です。このhttps://www.youtube.com/watch?v=mmCpMWQGw7Mに従ってください。何か問題がある場合は、特定の質問をしてください。 –

答えて

1

することは、あなたはPower PivotまたはDataGet and TransformFrom TableUnPivotにこれらの列を使用することができます。あなたが望むよう次に再ラベル:

enter image description here

enter image description here

enter image description here

+0

um .....なぜSSISソリューションを求めてからExcelを使用するのですか? –

1

テンポラリテーブルにデータをロードしてから、必要なテーブルにピボットテーブルを挿入してください。

DECLARE @cols nvarchar(max) = '', 
     @sql nvarchar(max) 

SELECT @cols = @cols + ','+QUOTENAME(name) 
FROM sys.columns 
WHERE OBJECT_ID = OBJECT_ID('#temp') 
AND name != 'Country' 

SELECT @sql = N' 
INSERT INTO NewTable 
SELECT Country, 
     [Year], 
     [Values] 
FROM #temp 
UNPIVOT (
    [Values] FOR [Year] IN ('+STUFF(@cols,1,1,'')+') 
) unpvt' 

EXEC sp_executesql @sql 

出力が挿入されることになります。

Country Year Values 
Tunisia 2000 X1 
Tunisia 2001 X2 
Tunisia 2002 X3 
Tunisia 2003 X4 
Algeria 2000 X21 
Algeria 2001 X22 
Algeria 2002 X23 
Algeria 2003 X24 

注:私は列(年)の数についてはよく分からないので、私は、動的SQLを使用して、あなたの入力テーブルに。列の数が決定された場合 - その後、一時テーブルでより良い負荷データを、次に使用:

INSERT INTO NewTable 
SELECT Country, 
     [Year], 
     [Values] 
FROM #temp 
UNPIVOT (
    [Values] FOR [Year] IN ([2000],[2001],[2002],[2003]) 
) unpvt 

または1つ以上の方法は、(私の例ではNewTable)をExcelでピボットを使用し、送信先テーブルにその結果をロードすることです。これは@RonRosenfeldによって提供された回答に示されています。 Excel 2010以降をお持ちの場合は

関連する問題