2010-05-24 8 views
1

select distinct * from Drivers where IsDeleted=0 me donne ce,instruction select SQL basé sur une colonne distincte des valeurs

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

Je veux sélectionner * sur la base distincte DriverMobNo colonne

+0

"Je veux sélectionner * basé sur une colonne DriverMobNo distincte" - je ne suis pas sûr de ce que vous voulez dire. Pouvez-vous donner un exemple de la table de résultats que vous voulez obtenir? –

+0

@joe je veux enlever une rangée qui contient 'DriverMobNo' dans les rangées précédentes ... –

+0

Voulez-vous dire que vous voulez renvoyer un seul conducteur pour chaque DriverMobNo? Donc, Chandru et Uday1 ne seraient pas retournés, parce que vous avez déjà un pilote (Uday) pour ce DriverMobNo? –

Répondre

1

Étant donné que vous avez trois lignes avecidentiques- lequel de ces trois voulez-vous en faisant votre SELECT ?? Un arbitraire? Le plus récent? Le plus ancien ??

Vous pouvez certainement faire

SELECT DISTINCT DriverMobNo FROM dbo.Drivers WHERE IsDeleted = 0 

et obtenir ces DriverMobNo distinctes valeurs - mais si vous voulez avoir toutes les colonnes de votre SELECT, vous devez être plus précis quant à laquelle des trois lignes avec DriverMobNo = 9566643707 vous voulez récupérer.

MISE À JOUR: Ok, vous voulez plus vieux - une façon de faire est d'utiliser un CTE (expression de table commune):

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 

qui devrait "partition" de vos données par DriverMobNo et commencer à compter haut, ordre par date de création, donc l'entrée RowNo = 1 sera toujours la plus ancienne pour chaque DriverMobNo.

+0

Le plus ancien est ce que je veux... –

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

votre requête ne semble pas fonctionner .. –

0

un peu difficile de comprendre ce que vous voulez Là.

C'est parce que vous avez des lignes uniques que vous devez utiliser les colonnes dont vous avez besoin.

Par exemple

SELECT DISTINCT DriveMobNo, CreatedDate DE Pilotes OÙ IsDeleted = 0

vous donnera le nombre de pilotes uniques et la date de création, mais vous auriez encore des lignes qui revenir avec le même numéro de téléphone mobile deux fois qu'il ya des dates différentes à

+0

Je veux supprimer une ligne qui contient DriverMobNo dans les lignes précédentes –

+1

Voulez-vous dire SELECT DISTINCT DriveMobNo FROM Pilotes WHERE IsDeleted = 0 –

1

Ceci sélectionnera un pilote pour chaque DriverMobNo. S'il existe plusieurs pilotes pour un DriverMobNo particulier, il renvoie le premier.

select * from Drivers 
where DriverId in (
    select min(DriverId) from Drivers 
    where IsDeleted = 0 
    group by DriverMobNo 
) 
Questions connexes