首页 > 解决方案 > 有没有办法将 SQL 中的表“展开”为多个规范化表?(SQL 服务器)

问题描述

我有一些由 SQL XML 查询生成的数据,该查询使用一个交叉应用和一个外部应用创建以下形式的表:

COL 1   | COL 2 |   COL 3
abe     |   dog |   ball
abe     |   dog |   stick
abe     |   cat |   yarn
ben     |   cow |   NULL
ben     |   dog |   water
ben     |   dog |   stick

在这个例子中,第 1 列是人,第 2 列是他们的宠物,第 3 列是他们的宠物喜欢的东西的列表(宠物可能不喜欢任何东西)。实际上,第 1,2 和 3 列分别由多列表示。

我想将这些数据“展开”成 3 个表,即人、宠物和宠物兴趣。在这样做时,我还想创建从宠物到人的多对一关系以及从 pet_interests 到宠物的多对一关系。

如果不使用 C# 手动迭代数据,我无法找到一种方法,但我觉得必须有一种更简单的方法。我希望有人能够以最好的方式帮助我。

提前致谢。

标签: sqlsql-server

解决方案


我将展示这种方法。首先,创建引用表:

select identity(1, 1) as personId, col1 as name
into persons
from t
group by name;

对其余的表重复此操作。

然后为您的 1-1 表使用参考表:

select identity(1, 1) as personPetId, p.personId, pe.petId
into personPets
from t join
     persons p
     on t.col1 = p.name join
     pets pe
     on t.col2 = pe.species
group by col1, col2;

根据需要重复。


推荐阅读