2010-11-13 7 views
1

J'ai une table comme ci-dessousrequête SQL pour des valeurs distinctes

INTERPRO GOTERM1 GOTERM2 CONFIDENCE 

IPR123  1576  2345  1.000 
IPR235  3459  4987  1.000 
IPR356  9987  5567  1.000 
IPR568  3345  3213  0.88 
IPR342  7860  7654  0.88 

Maintenant, je veux tout de l'enregistrement avec des valeurs de confiance distinctes que comme ci-dessous

IPR123 1576 2345 1.000 
IPR342 7860 7654 0.88 
+1

Eh bien, 'IPR123 1576 2345 1,00 0' et pourquoi pas 'IPR235 3459 4987 1.000'? Définissez des critères supplémentaires pour décider quelle ligne sélectionner. – zerkms

+0

une ligne avec une valeur de confiance distincte est prise. Il n'y a aucun critère particulier. –

+0

Est-ce que * INTERPRO * est unique? – LIX

Répondre

0
SELECT t.INTERPRO, t.GOTERM1, t.GOTERM2, t.CONFIDENCE 
FROM tbl t 
WHERE t.INTERPRO = (SELECT MIN(t2.INTERPRO) 
        FROM tbl t2 
        WHERE t.CONFIDENCE = t2.CONFIDENCE) 

Edit:

Si INTERPRO n'est pas unique-par-CONFIANCE:

SELECT t2.INTERPRO, t2.GOTERM1, t2.GOTERM2, t1.CONFIDENCE 
FROM (SELECT DISTINCT t3.CONFIDENCE FROM tbl t3) t1, 
     (SELECT TOP 1 t4.INTERPRO, t4.GOTERM1, t4.GOTERM2 
     FROM tbl t4 
     WHERE t4.CONFIDENCE = t1.CONFIDENCE) t2 

devrait fonctionner, même si je n'ai pas d'instance SQL Server à portée de main pour le vérifier.

+2

et s'il y a 2 lignes avec le même t.INTERPRO? – zerkms

+0

J'ai pensé à cela après que j'ai posté et ai quitté l'ordinateur pour la nuit. Si INTERPRO n'est pas unique par CONFIANCE, alors cela ne fonctionnera pas, donc le temps pour un edit ... – Andrew

2

En utilisant Sql Server 2005+ vous pouvez essayer quelque chose comme

;WITH Vals AS(
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY CONFIDENCE ORDER BY INTERPRO) RowID 
     FROM YourTable 
) 
SELECT * 
FROM Vals 
WHERE RowID = 1 

ROW_NUMBER (Transact-SQL)

-1

si INTERPRO est unique

SELECT * FROM TABLE WHERE INTERPRO in 
(
SELECT MIN(INTERPRO) FROM TABLE 
GROUP BY CONFIDENCE 
) 

vous pouvez remplacer MIN() avec tout ce que vous aimez

+0

Cette requête donnera des données non-cohérentes – zerkms

+0

comme user489678 dit: toute ligne avec une valeur de confiance distincte est prise .Il n'y a pas de critères particuliers. – LIX

+0

hey merci beaucoup. Cela a fonctionné –

Questions connexes