2013-02-25 5 views
4

Je souhaite exécuter une requête qui élimine les lignes dupliquées en fonction des valeurs de colA et de colB. Cependant, je veux toujours retourner les valeurs de colC et colD.Sélection de valeurs de colonne distinctes et non distinctes

Voici un exemple simple de ce que j'ai jusqu'à présent:

SELECT DISTINCT colA, colB ?colC, colD? 
FROM TABLE1 

ou

SELECT colA, colB ?colC, colD? 
FROM TABLE1 
GROUP BY colA, colB 

méthode Soit ne me permet pas de revenir colC, et COLD à moins que je les vérifier en tant que valeurs distinctes ou un groupe comme colA et colB. Je ne veux pas faire cela, seulement colA et colB doivent être distincts, pas colC et colD. Je veux juste les renvoyer.

Des idées sur comment je peux accomplir ceci?

+4

En supposant qu'il y ait plusieurs lignes dans 'table1' avec un ensemble particulier de valeurs pour' colA' et 'colB', quel jeu de valeurs' colC' et 'colD' voulez-vous retourner? Les valeurs minimales? Valeurs maximales? La «première» ou la «dernière» valeur (dans ce cas, vous devez nous indiquer comment classer les données afin que «premier» et «dernier» aient un sens)? –

+2

Pouvez-vous poster des exemples de données et le résultat souhaité? – Taryn

+0

@JustinCave Pouvez-vous élaborer un peu plus sur la façon dont j'utiliserais «premier» et «dernier»? Je crois que je voudrais toujours la première valeur. Comment cela ressemblerait-il à mon exemple? – Baxter

Répondre

5

Voulez-vous list_agg?

select colA, colB, 
     list_agg(distinct colC, ','), 
     list_agg(distinct colD, ',') 
from Table1 
Group by ColA, ColB 

Si une valeur arbitraire ferait pour colC et COLD, vous pouvez utiliser min():

select colA, colB, min(colC), min(colD) 
from Table1 
Group by ColA, ColB 
+0

Je pense que toute valeur arbitraire va travailler pour moi dans ce cas. Je vais essayer d'essayer les colonnes que je ne veux pas regrouper. – Baxter

+0

La solution fonctionne très bien, merci. – Baxter

1

Le DISTINCT applique à toutes les valeurs que vous sélectionnez, et pas seulement à quelques colonnes. Dans votre cas, cela s'appliquera à tous: colA, colB, colC, colD. Il est impossible de sélectionner toutes les colonnes et en faire certaines distinctes et d'autres non. La seule façon de faire cela montré dans l'exemple de Gordon, c'est le seul exemple et réponse valide.

+0

Je suis d'accord. J'ai essayé d'utiliser min pour les colonnes que je ne me soucie pas d'être unique ou ordonné. – Baxter

Questions connexes