использование различных не работает на сервере SQL - PullRequest
1 голос
/ 25 января 2011

По какой-то причине следующий DISTINCT не работает. Я ожидал только один b@gmail.com из столбца «Электронная почта», но получил два одинаковых.

 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
  ------------- ------------------- -----------------------
  b@gmail.com   41.773289200000001  -71.378798500000002
  b@gmail.com   41.908398699999999  -71.436531000000002

(затронуто 2 строки)

Ответы [ 4 ]

5 голосов
/ 25 января 2011

Это правильные результаты. Широта и долгота различны, и поэтому строки различаются.

Если вы хотите получить электронное письмо только один раз, какую широту и долготу, по вашему мнению, следует указать для этого электронного письма?

Кроме того, поскольку у вас нет подстановочных знаков в 'yahoo', вы знаете, что это то же самое, что использование оператора =?

3 голосов
/ 25 января 2011

Distinct применяется ко всей строке набора результатов, а не к полю, которое было указано прямо ранее.

Таким образом, в вашем случае вы получите уникальные строки t.Email,t.Lat_From,t.Lon

2 голосов
/ 25 января 2011

Для 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 на любой порядок, в соответствии с которым вы хотите, чтобы единственная запись-на-электронную почтубыть сохранены.

2 голосов
/ 25 января 2011

если вы хотите, чтобы он был различен в зависимости от столбца, вам нужно добавить группу по выражению.

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

Вам нужно будет использовать заказ по предложению, если вы хотите получить конкретную запись.

...