将非规范化文件中的数据加载到规范化表中

Posted

技术标签:

【中文标题】将非规范化文件中的数据加载到规范化表中【英文标题】:Load data from denormalized file into a normalized table 【发布时间】:2011-03-27 10:14:42 【问题描述】:

我收到一个非规范化文本文件,必须将其加载到规范化表中。

非规范化表:

客户 ID -- 类别 -- Category2 -- Category3 -- Category4 1 -- A -- B -- C -- D

当它被标准化后,它应该是这样的:

客户 ID -- 类别 1 -- A 1 -- B 1 -- C 1 -- D

编写 T-SQL 语句以实现此目的的最佳方法是什么(SQL Server 2008)?

【问题讨论】:

我会使用一种编程语言进行迭代并为每行插入 4 次。但这对我来说很舒服。 或者对每个类别使用一个 INSERT 查询。 【参考方案1】:

使用UNPIVOT 关键字:http://technet.microsoft.com/en-us/library/ms177410.aspx

您自然会希望将 [File] 替换为某种 OpenRowSet 查询或使用导入/导出向导将数据导入临时表。

SELECT CustomerId, Category
FROM 
(
   SELECT CustomerId, Category, Category2, Category3, Category4
   FROM [File]

) tblDenormalized
UNPIVOT
(
   Category FOR Column IN 
   (Category, Category2, Category3, Category4)
) AS unpivot;

【讨论】:

以上是关于将非规范化文件中的数据加载到规范化表中的主要内容,如果未能解决你的问题,请参考以下文章

雪花数据加载最佳实践规范化还是非规范化?

从文件加载数据并规范化

如何将非规范化表映射到两个实体?

如何将非结构化的 excel 电子表格加载到熊猫中?

调整SQL Server中的大型查询

将非规范化表转换为嵌套结构