SQL:如何根据某些属性值仅选择不同的行

时间:2014-11-14 12:51:35

标签: sql sql-server tsql

我的数据库中有一个sql-view,它使用UNION来连接不同的结果(一侧包含左连接,而另一侧使用NULL作为缺失值的占位符)。在连接的一部分中,其中一个属性(外键)为空,而在另一部分中,它包含一个值(对于相同的唯一ID)。所以我的加入会给我一个这样的结果集:

ID     |    ForeignKey
1           NULL
1           123
2           NULL
3           NULL
4           NULL
4           234

我尝试将此结果集减少为仅包含具有唯一ID的条目,但我无法检查ForeignKey是否为NULL,因为那样我将过滤掉键为NULL的所有其他行。

我正在寻找的是一种告诉SQL检查整个结果集是否使用两次相同ID的方法。如果它找到这样的副本(如上面ID为1和4的条目),它应该只显示具有值(123和234)的那个。应该过滤掉带有NULL的条目。

如果没有找到重复(对于ID 2和3),应该使用该条目。

所以我想将上面的结果集转换为:

ID     |    ForeignKey
1           123
2           NULL
3           NULL
4           234

我试图通过使用OVER关键字和PARTITION By ID来解决问题,其中我将RowNumber设置为等于1.这会过滤掉重复的条目但是它总是选择带有NULL的条目而不是带有实际的条目键,所以错误的结果如下所示:

ID     |    ForeignKey
1           NULL
2           NULL
3           NULL
4           NULL

1 个答案:

答案 0 :(得分:4)

SELECT ID , MAX(ForeignKey) AS ForeignKey
FROM TableName
GROUP BY ID
相关问题