我有一张宽大的桌子,可以存储人们的家庭信息,如家谱(超过20列,对于某个人及其父母和父母的父母都有id)。一行中的所有数据都可以在一行中获得。
我想创建另一个表,其中包含此原始表中每个人的条目。因此,在这个表格(目标)中,我将每个人作为一个单独的条目放在我的表中,只有他们的妈妈和爸爸的id(总共三列)。
总之,原始表中的每个人的新表格都是id, momid, dadid
。所以给定id 1他的妈妈(2)应该成为目标表中的新行,与他们相应的妈妈和爸爸(momofmomid
和dadofmomid
; 4和5)。
这是一张代表原始表格和我需要的图像。
答案 0 :(得分:0)
尝试这种方式:
SELECT row_number() over (order by momId, dadId) as ID,
momId,
dadId
into newTable
FROM (
SELECT distinct momId, dadId
FROM (
SELECT momId, dadId
FROM actualTable
UNION
SELECT momOfMomId, dadOfDadId
FROM actualTable
) tb
) tb2
其中newTable
是您要创建的新表的名称。
在此处查看:http://sqlfiddle.com/#!6/31859/1
编辑答案,因为OP在评论中解释了他真正需要的东西。 另外,我已经制作了新的ID,所以如果不对,请解释如何处理新表的ID。
修改强>
在理解了OP问题并对其进行了更多的思考后,我实际上发现它比我想的要简单得多。所以,这是新的解决方案:
SELECT id, momId, dadId INTO newTable2
FROM (SELECT id, momId, dadId
FROM actualTable
UNION
SELECT momId, momOfMomId, dadOfDadId
FROM actualTable
) a;
如果您不需要新表,只需从上面的查询中删除newTable2
子句,此选择将创建INTO newTable2
。要查看新表中的数据,请执行以下操作:
SELECT * FROM newTable2