2014-11-14 80 views
1

我在我的數據庫中有一個sql-view,它使用UNION來連接不同的結果(一邊包含左連接,而另一邊使用NULL作爲佔位符缺少值)。在連接的一部分中,一個屬性(外鍵)爲空,而另一部分包含一個值(對於相同的唯一ID)。所以我的加入將會給我一個結果集是這樣的:SQL:如何根據某些屬性值僅選擇不同的行

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

我儘量減少這種結果設置爲包含一個唯一的ID只有條目,但我無法對證NULL的ForeignKey的,因爲這樣我會過濾掉所有密鑰爲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

您與OVER(PARTITION BY)解決方案會工作一世如果您還包括ORDER BY ForeignKey DESC – 2014-11-14 12:55:50

回答

4
SELECT ID , MAX(ForeignKey) AS ForeignKey 
FROM TableName 
GROUP BY ID 
+0

謝謝!有用!唯一的問題是我現在必須手動指定每一列。否則,會出現xyz列不能被選中的錯誤,因爲它不在group By子句的集合中... – Philipp 2014-11-14 13:10:01