SQL查询将两行合并为一个结果

时间:2014-09-11 07:19:30

标签: sql sql-server

我有一个要求写一个SQL Server查询来从一个表读取,让我们假设该表名为Table1,结构和行如下所示:

enter image description here

关键是如果列RefID具有值,例如,第2行具有RefID值3,它引用另一行的ID(第3行),第3行也必须具有非空RefID且值必须为第一个的ID。这个想法是这两个属于同一个对象所以我想把它们作为一个结果行。

我知道我可以像这样在同一张桌子上进行内连接:

select T1.*, T2.* from Table1 T1 inner join Table1 T2 on T1.RefID = T2.ID
where T1.ID is not null 

但问题是结果有冗余:结果将有4行,正如我所提到的,因为第2行和第3行一起代表一个对象,我想只获得2行:第2行第3行,第4行第5行。另外,我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

只需确保他们的ID排成一行:

select T1.*, T2.* from Table1 T1 inner join Table1 T2 on T1.RefID = T2.ID AND T1.ID < T2.ID
where T1.ID is not null 

答案 1 :(得分:1)

如果记录是多余的并且ID列是唯一的,我完全同意@bulat你不需要where子句它们已被消除。我这个查询对你有用。

select * from Table1 a inner join Table1 b ON a.ID=b.RefID and a.ID>b.ID