2011-01-25 118 views
1

出於某種原因,以下DISTINCT不起作用。我期待Email列中只有一個[email protected],但我得到兩個相同的。使用distinct在sql server中不起作用

1> SELECT DISTINCT t.Email,t.Lat_From,t.Lon_From 
     FROM tbl_Trip t,tbl_User u 
     WHERE t.Email like u.Email AND u.Member_Of like 'yahoo' 
2> go 

    Email   Lat_From   Lon_From 
    ------------- ------------------- ----------------------- 
    [email protected] 41.773289200000001 -71.378798500000002 
    [email protected] 41.908398699999999 -71.436531000000002 

(受影響2行)

+1

對於那裏的特定結果,您期望作爲結果檢索哪一行? – zerkms 2011-01-25 03:46:44

回答

2

對於SQL Server 2005年起,這應該爲你工作,如果你只想要一個胡亂

SELECT Email,Lat_From,Lon_From 
FROM 
(
    SELECT t.Email,t.Lat_From,t.Lon_From, rn=row_number() over(
     partition by t.Email order by t.Lat_From) 
     FROM tbl_Trip t,tbl_User u 
     WHERE t.Email like u.Email AND u.Member_Of like 'yahoo' 
) X 
WHERE rn=1 

變化order by t.lat_from任何順序在此基礎上你想要的奇異記錄每個電子郵件被保留到。

3

鮮明被施加到整個結果集行,而不是它是正確的前指定的字段。

所以你的情況,你得到的t.Email,t.Lat_From,t.Lon

5

唯一行這些都是正確的結果。緯度和經度不同,因此行是DISTINCT。

如果您只需要電子郵件一次,您認爲應該爲該電子郵件報告哪些經緯度?

另外,因爲'yahoo'中沒有任何通配符,您知道它與使用=運算符相同嗎?

2

如果您希望它根據需要添加組by子句的列而不同。

SELECT DISTINCT t.Email 
    , t.Lat_From 
    , t.Lon_From 
FROM tbl_Trip t,tbl_User u 
WHERE t.Email like u.Ema il 
AND u.Member_Of like 'yahoo' 
GROUP BY t.Email 

如果您想獲取特定條目,則需要使用order by子句。

+0

此**不適用於SQL Server。只有MySQL,一個畸變。 – RichardTheKiwi 2011-01-25 03:54:01

+0

您認爲這會返回哪個緯度和經度值? – 2011-01-25 03:55:36