Sql server 将数据从excel转换为SSIS

Sql server 将数据从excel转换为SSIS,sql-server,excel,ssis,Sql Server,Excel,Ssis,这是我的excel工作表:包含关于不同季度测试结果的数据 ID Q1Age Q1-Result1 Q1-result2 Q2Age Q2-Result1 Q2-result2 1 4 8 9 4 10 10 2 5 9 10 6 9 5 如何使用ssis将上述excel转换为以下格式? 我计划有一个标志,表明季度为第一季度

这是我的excel工作表:包含关于不同季度测试结果的数据

ID  Q1Age   Q1-Result1  Q1-result2  Q2Age Q2-Result1  Q2-result2
1    4        8           9          4       10      10
2    5        9           10         6        9       5
如何使用ssis将上述excel转换为以下格式? 我计划有一个标志,表明季度为第一季度或第二季度

ID  Age   Result1   Result2   Source
1    4      8         9        Q1
2    5      9         10       Q1
1    4      10        10       Q2
2    6      6          9       Q2

您可以通过将数据分成两个流的多播来实现这一点。在每个流中,您只返回分隔Q1和Q2数据的相关列,然后使用UNION ALL将它们重新连接在一起。因此,一个流将具有ID、Q1年龄、Q1-Result1等,以及一个名为source的派生字段,该字段添加了一个硬编码值Q1,第二个流将具有ID、Q2年龄等。然后,联合所有数据流都将把这两个数据流放在一起。

使用SQL Server导入/导出向导将数据导入SQL Server并使用以下命令

测试数据 查询 后果
格雷格,我考虑过了。但是,我不想把我的羊撕成碎片。我想使用相同的excel表格。因为在我的真实数据中,我有很多四分之一,比如Q1-Q20。你不会把它撕开——你只会询问它几次。如果你愿意,你可以做一个多播,然后只选择你需要在每一边的字段。事实上,这可能会更好,因为你只需要打开一次电子表格就可以访问数据。我编辑了我的答案来澄清。如果你认为这个答案有效,那么把它标记为已被接受,这样每个人都能从中受益。谢谢。它有一个SQL Server的标签,不是吗?
DECLARE @TABLE TABLE(ID INT, Q1Age   INT,Q1_Result1  
            INT,Q1_result2  INT,Q2Age INT,Q2_Result1  INT,Q2_result2 INT)
INSERT INTO @TABLE VALUES 
(1, 4, 8, 9 , 4, 10, 10),
(2, 5, 9, 10, 6, 9 , 5)
SELECT ID
      ,Age
      ,Result1
      ,Result2
      ,Source 
FROM 
(
SELECT ID 
      ,Vals
      ,LEFT(Cols ,2) AS Source
      ,REPLACE(RIGHT(Cols , LEN(Cols)- LEN(LEFT(Cols ,2))) , '_','') Column_Name
FROM @TABLE t 
   UNPIVOT(Vals FOR Cols 
               IN (Q1Age, Q1_Result1,Q1_result2,Q2Age,Q2_Result1,Q2_result2)
          )up
) p
PIVOT (SUM(Vals)
       FOR Column_Name
       IN (Result1,Result2,Age)
       )p
╔════╦═════╦═════════╦═════════╦════════╗
║ ID ║ Age ║ Result1 ║ Result2 ║ Source ║
╠════╬═════╬═════════╬═════════╬════════╣
║  1 ║   4 ║       8 ║       9 ║ Q1     ║
║  2 ║   5 ║       9 ║      10 ║ Q1     ║
║  1 ║   4 ║      10 ║      10 ║ Q2     ║
║  2 ║   6 ║       9 ║       5 ║ Q2     ║
╚════╩═════╩═════════╩═════════╩════════╝