SQL: Comment puis-je sélectionner uniquement les lignes avec une valeur unique sur certaines colonnes?
Un million de mercis à tous pour les réponses. Malheureusement, aucune de ces solutions ne semble à travailler sur ma fin, et je pense que l'exemple que j'ai fourni est foiré.
Alors laissez-moi essayer de nouveau.
Ma table ressemble à ceci:
contract project activity
row1 1000 8000 10
row2 1000 8000 20
row3 1000 8001 10
row4 2000 9000 49
row5 2000 9001 49
row6 3000 9000 79
row7 3000 9000 78
Fondamentalement, la question je suis à la recherche d'retourne "2000,49" pour "contrat d'activité" parce que le marché n ° 2000 en a un, et un SEUL, l'unique activité de la valeur.
Encore une fois, un million de mercis à l'avance,
boroatel
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Mis à jour pour utiliser vos nouvelles données fournies:
Les solutions en utilisant les données d'origine peut être trouvé à la fin de cette réponse.
À l'aide de vos nouvelles données:
retourne:
2000, 49
Des Solutions à l'aide de données d'origine
AVERTISSEMENT:
Les solutions suivantes utiliser les données déjà donné dans la question et ne peut faire sens pour la question en cours. Je les ai laissées fixé pour l'exhaustivité.
Cela devrait vous obtenez une liste de toutes les valeurs dans col1 qui ne sont pas distincts. Vous pouvez les placer dans un tableau var ou des temp de table et de se joindre à son encontre.
Voici un exemple en utilisant une sous-requête:
Ce retourne:
Et une autre méthode que les utilisateurs d'une table temporaire et rejoignez:
Renvoie également:
Pour MySQL:
Je suis un fan de PAS EXISTE
Essayez ceci:
Modifié!
Et voici une autre, plus courte/nettoyant sans sous-requête
En utilisant le "tableau dynamique" dans SQL Server (interrogation d'une parenthèse-entouré de requête), vous pouvez revenir en 2000, 49 w/suivantes.
Si votre plate-forme n'offre pas l'équivalent du "tableau dynamique" ANSI-extension, vous pouvez toujours utiliser une table temporaire en deux étapes, énoncé par l'insertion, les résultats dans le "tableau dynamique" à une table temporaire, puis l'exécution d'une instruction select ultérieure sur la table temp.
En supposant que votre table de données est appelé ProjectInfo:
Les recoins les plus profonds de la requête identifie les contrats et les activités. Le prochain niveau de la requête (celle du milieu) identifie les contrats où il y a une seule activité. Le ultrapériphériques requête tire alors le contrat et de l'activité de la ProjectInfo table pour les contrats qui ont une activité unique.
Testé à l'aide d'IBM Informix Dynamic Server 11.50 - faut-il travailler d'ailleurs.
Ici est une autre option à l'aide de serveurs sql count distinct:
Désolé, vous n'êtes pas l'utilisation de PostgreSQL...
SELECT DISTINCT SUR le contrat, l'activité
*
DE thetable
COMMANDE PAR contrat, l'activité
http://www.postgresql.org/docs/8.3/static/sql-select.html#SQL-DISTINCT
Oh, attendez. Vous ne voulez valeurs avec exactement un...
SÉLECTIONNEZ le contrat, de l'activité, count()
DE thetable GROUPE PAR le contrat, l'activité AYANT count() = 1
Désolé pour le vieux post, je sais, mais j'ai eu le même problème, ne pouvait pas faire de la ci-dessus pour travailler pour moi, mais j'ai tout compris.
Cela a fonctionné pour moi:
SELECT DISTINCT [colonne]Comme valeurs distinctes
À PARTIR de [db].[dbo].[table]
SELECT DISTINCT Col1,Col2 from Table GROUP BY Col1 AVOIR COUNT( DISTINCT Col1 ) = 1