Sql server 将数据从excel转换为SSIS
这是我的excel工作表:包含关于不同季度测试结果的数据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转换为以下格式? 我计划有一个标志,表明季度为第一季度
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 ║
╚════╩═════╩═════════╩═════════╩════════╝