有没有一种方法可以将SQL中的表“展开”为多个规范化表? (SQL Server)

时间:2018-07-06 15:11:19

标签: sql sql-server

我有一些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

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

我想将此数据“分解”为3个表,person,pet和pet_interests。为此,我还想创建一个从宠物到人的多对一关系,以及从pet_interests到宠物的多对一关系。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

我将展示该方法。首先,创建参考表:

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;

根据需要重复。