我有一些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#手动遍历数据的方法,但是我觉得必须有一种更简单的方法。我希望有人能够以最好的方式帮助我。
谢谢。
答案 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;
根据需要重复。