2011-01-25 4 views
1

다음과 같은 DISTINCT가 작동하지 않습니다. 나는 이메일 칼럼에서 단 하나의 [email protected]을 기대했지만 두 개의 동일한 것을 얻었다. distinct를 사용하는 것이 SQL 서버에서 작동하지 않습니다.

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

답변

2

는 이후 SQL Server 2005의 경우, 이것은 당신을 위해 작동합니다.

+0

TOP 1이 아닌 이유는 무엇입니까? –

+0

고마워요이 작품 – Bruce

+0

cyberkiwi,이 작품의 성능에 대해 궁금한데 어떤 생각이 있습니까? – Bruce

3

구별하지가 직전 지정된 필드 전체 결과 세트의 행에 적용된다.

그래서 귀하의 경우 당신은 사람들이 올바른 결과입니다 t.Email,t.Lat_From,t.Lon

5

의 고유 한 행을 얻을. 위도와 경도가 다르므로 행이 DISTINCT입니다.

이메일을 한 번만 받고 싶다면 해당 이메일에 대해 어떤 위도와 경도로보고해야합니까?

또한 'yahoo'에 와일드 카드가 없기 때문에 = 연산자를 사용하는 것과 같은 것을 알 수 있습니까?

2

그룹 별 절을 추가해야하는 열에 따라 고유하게하려면이 값을 구하십시오.

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 절을 사용해야합니다. 당신은 단지 무차별

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있는 사용자가 단일 레코드 당 이메일을 유지하려는 기준으로 어떤 순서로 일을 원하는 경우

+0

이 ** SQL Server에서 ** 작동하지 않습니다. MySQL 만, 수차. – RichardTheKiwi

+0

어떤 위도와 경도 값이 반환 될 것으로 생각하십니까? –

+0

@cyberwiki : 나는 그것이 수차라고 생각하지 않습니다. 이것은 신중하게 고려 된 것으로 보입니다. 그러나 그것은 MySQL에 고유합니다. –

관련 문제