2010-11-05 4 views
0

J'ai une base de données SQL Server 2008 avec les informations suivantes dans un tableau:Distinct SQL Query

ID Name 
-- ---- 
1 John 
2 Jill 
3 John 
4 Phil 
5 Matt 
6 Jill 

Je veux afficher les noms uniques dans une liste déroulante. Pour cette raison, je n'ai besoin que de l'un des ID associés au nom unique. Je sais que c'est sale. Je n'ai pas créé ce gâchis. J'ai juste besoin des noms uniques avec l'un des ids. Comment écrire une requête qui le fera? Je sais que ce qui suit ne fonctionnera pas à cause du champ ID.

SELECT DISTINCT 
    [ID], [Name] 
FROM 
    MyTable 
+2

Une bonne question est: pourquoi y a-t-il des dupli Cates dans la table? Est-ce que cela fait partie des exigences fonctionnelles? –

Répondre

16
SELECT MIN(ID) AS ID, [Name] 
FROM MyTable 
GROUP BY [Name] 

Cela renverra la première (c.-à-MINimum) ID pour chaque nom distinct

0

Vous pouvez aussi le faire avec le rang sur la fonction

SELECT 
Id, 
Name 
FROM 
(
    SELECT 
    Id, 
    [Name], 
    RANK() OVER (PARTITION BY [Name] Order By Id) As Idx 
    FROM Test 
) A 
WHERE Idx = 1 

Pour obtenir la compréhension de rang sur fonction lire ceci: http://msdn.microsoft.com/en-us/library/ms176102.aspx