SQL выбор оператора на основе различных значений столбца - PullRequest
1 голос
/ 24 мая 2010

select distinct * from Drivers where IsDeleted=0 дает мне это,

альтернативный текст http://www.imagechicken.com/uploads/1274691753099236100.jpg

Я хочу выбрать * на основе отдельного DriverMobNo столбца

Ответы [ 4 ]

1 голос
/ 24 мая 2010

Это выберет один драйвер для каждого DriverMobNo. Если для определенного DriverMobNo существует более одного драйвера, он возвращает первый.

select * from Drivers
where DriverId in (
  select min(DriverId) from Drivers
  where IsDeleted = 0
  group by DriverMobNo
)
1 голос
/ 24 мая 2010

Учитывая тот факт, что у вас есть три строки с одинаковыми DriverMobNo - какой из этих трех вы хотите при выполнении SELECT ?? Произвольный? Самый последний? Самый старый ??

Вы, конечно, можете сделать

SELECT DISTINCT DriverMobNo FROM dbo.Drivers WHERE IsDeleted = 0

и получите эти различные DriverMobNo значения - но если вы хотите, чтобы все столбцы были в вашем SELECT, вам нужно более точно указать, какую из трех строк с DriverMobNo = 9566643707 вы хотите получить.

ОБНОВЛЕНИЕ: Хорошо, вы хотите самый старый - один из способов сделать это - использовать CTE (Common Table Expression):

WITH Drivers AS
(
    SELECT 
        DriverId, DriverName, DriverMobNo, CreatedDate,
        ROW_NUMBER() OVER (PARTITION BY DriverMobNo ORDER BY CreatedDate) 'RowNo'
    FROM dbo.Drivers 
    WHERE IsDeleted = 0
) 
SELECT DriverId, DriverName, DriverMobNo, CreatedDate
FROM Drivers
WHERE RowNo = 1

Это должно «разделить» ваши данные на DriverMobNo и начать подсчет, упорядочить по дате создания, поэтому запись RowNo = 1 всегда будет самой старой для каждого DriverMobNo.

1 голос
/ 24 мая 2010
select * from Drivers  where DriverMobNo in (select DriverMobNo from Drivers where IsDeleted=0
 group by DriverMobNo ) and IsDeleted=0
0 голосов
/ 24 мая 2010

Немного трудно понять, чего ты там хочешь.

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

Например

ВЫБЕРИТЕ DISTINCT DriveMobNo, Дата создания ОТ Драйверы ГДЕ IsDeleted = 0

даст вам уникальный номер драйвера и дату создания, но у вас все равно будут строки, которые будут возвращаться с одним и тем же номером мобильного телефона дважды, так как там были разные даты для

...