【问题标题】:join rows on column (microsoff SSIS)加入列上的行(微软 SSIS)
【发布时间】:2016-08-08 09:19:37
【问题描述】:

我有包含这些信息的 excel 文件

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

我想像这样将这些信息存储在数据库中

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

我正在使用 SSIS,而且我是大多数组件的初学者.. 谢谢

【问题讨论】:

  • 尝试搜索 sql-server pivot....
  • 现在所有内容都有一个 youtube 视频。你实际上想要unpivot。关注此youtube.com/watch?v=mmCpMWQGw7M,如果您有任何问题,请提出具体问题。

标签: sql-server excel tsql ssis


【解决方案1】:

如果您有 Excel 2010 或更高版本,您可以使用 Power PivotDataGet and TransformFrom TableUnPivot 这些列。然后根据需要重新标记:

【讨论】:

    【解决方案2】:

    您可以在某个临时表中加载数据,然后取消透视并插入您需要的表中:

    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
    

    或者另一种方法是在 Excel 中使用透视并将其结果加载到目标表(在我的示例中为NewTable)。 @RonRosenfeld 提供的答案显示了这一点。

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多