2010-05-24 3 views
1

select distinct * from Drivers where IsDeleted=0 дает мне это,SQL SELECT заявления на основе отдельного столбца значения

alt text http://www.imagechicken.com/uploads/1274691753099236100.jpg

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

+0

«Я хочу выбрать * на основе отдельной колонки DriverMobNo» - не уверен, что вы имеете в виду. Можете ли вы привести пример таблицы результатов, которую вы хотите получить? –

+0

@joe Я хочу удалить строку, которая содержит 'DriverMobNo' в предыдущих строках ... –

+0

Вы хотите, чтобы вы вернули только один драйвер для каждого DriverMobNo? Итак, Chandru и Uday1 не будут возвращены, потому что у вас уже есть драйвер (Uday) для этого DriverMobNo? –

ответ

1

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

Можно, конечно, сделать

SELECT DISTINCT DriverMobNo FROM dbo.Drivers WHERE IsDeleted = 0 

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

UPDATE: Ok, вы хотите старейшей один - один из способов сделать это с помощью 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.

+0

Самый старый из них что я хочу... –

1
select * from Drivers where DriverMobNo in (select DriverMobNo from Drivers where IsDeleted=0 
group by DriverMobNo) and IsDeleted=0 
+0

ваш запрос не работает. –

0

Это немного трудно понять, что вы хотите там.

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

Для примера

SELECT DISTINCT DriveMobNo, CreatedDate ОТ Drivers ГДЕ IsDeleted = 0

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

+0

Я хочу удалить строку, содержащую DriverMobNo в предыдущих строках –

+1

Вы имеете в виду SELECT DISTINCT DriveMobNo FROM Drivers WHERE IsDeleted = 0 –

1

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

select * from Drivers 
where DriverId in (
    select min(DriverId) from Drivers 
    where IsDeleted = 0 
    group by DriverMobNo 
) 
Смежные вопросы