将非规范化文件中的数据加载到规范化表中
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;
【讨论】:
以上是关于将非规范化文件中的数据加载到规范化表中的主要内容,如果未能解决你的问题,请参考以下文章