2012-08-27 113 views
0

我有如下表:ID1 , ID2, Name, SexSELECT DISTINCT 2列

在表中有重複的ID1,但不同的ID2,姓名和性別的記錄 - 同樣有重複的ID2和不同ID1,姓名,性別記錄。 ID1和ID2都可以具有空值,但不能用於相同的條目。 我需要爲id1和id2選擇非重複記錄,例如

id1 id2  name sex 
10  null jack  M 
10  null tom  M 
null 40  jennie F 
null 32  jenie F 
null 32  emma  M 
10  null stevie M 

需要選擇查詢返回:

id1 id2  name  sex 
10  any any  any (any means it can be either jack,tom,stevie) 
null 40  jennie F 
null 32  any  any2 (any2 meaning jeniw or emma) 
+4

你肯定艾瑪是男性? –

+0

當我發佈這個問題時,我太忙於決定艾瑪的性別。事實上,bluefoot提供了soln,並且還將emma的性別改回到了女性(她曾經支持過)。好的接收Mark – Java4life

回答

2

你可以在你的WHERE子句中使用的EXISTS

select t1.id1, 
    t1.id2, 
    name, 
    sex 
from yourtable t1 
where exists (select * 
       from yourtable t2 
       where t1.id1 = t2.id1 
       or t1.id2 = t2.id2) 
group by t1.id1, t1.id2 

SQL Fiddle with Demo

+0

太棒了!非常感謝bluefoot! – Java4life

+0

我使用sql server 2005,要求名稱和性別在group by中,這會導致表中的所有條目。錯誤:列'yourtable.name'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中:select t1.id1,t1.id2,name,from yourtable t1 where exists(select * from yourtable t2 where t1.id1 = t2.id1 or t1.id2 = t2.id2)group by t1.id1,t1.id2 ....對此的任何解決方案? – Java4life

+0

您是否嘗試將它們添加到group by子句中? – Taryn