Je veux obtenir les valeurs distinctes de Col1 et sa valeur Col3 également, mais la condition est si col1 = col2, il devrait alors choisir la valeur COL3 correspondante, sinon, choisissez la valeur COL1 si elles ne sont pas identiques. Je suis bloqué dans la logique, toute aide sera appréciée!
Veuillez voir l'image ci-dessous pour plus de détails: p>
5 Réponses :
Utilisez la sous-requête corrélée
select col1,col3
from TABLE1 a
where col2 in (select min(col2) from table1 b where a.col1=b.col1)
Cela ne couvre pas les cas où il n'y a pas de valeur COL2 correspondante ... je pense
Travaillera sur les données d'échantillonnage ci-dessus simplement parce que c'est un peu pauvre. Ne fonctionnera pas si vous ajoutez de nouvelles lignes difficiles.
Je pense que vous pouvez rejoindre la table avec elle-même, puis utiliser un Conditio de jointure pour filtrer cela, puis décider de sélectionnez Col2 = Col1 et choisissez COL3 approprié:
SELECT DISTINCT a.COL1, CASE WHEN b.COL1 IS NULL THEN a.COL3 ELSE b.COL3 END as COL3 FROM TABLE1 a LEFT JOIN TBALE2 b on a.COL1 = b.COL2 and a.COL1 = b.COL1
select distinct COL1, if(COL1 = COL2, COL3, COL1) as result from table1
avec une jointure auto: Voir le Démo .
Résultats: P> > COL1 | COL3
> ---: | :---
> 11 | ABC
> 12 | ABC
> 13 | BDG
> 14 | DEF
> 15 | CEG
faire un groupe Utilisation par code> pour obtenir des valeurs de col1 distinctes. coalesce () code> Pour renvoyer la valeur COL3 s'il existe une ligne COL1 = COL2, sinon retourner La valeur maximale COL3 pour le COL1. (Pourrait utiliser min () code> aussi, si c'est mieux.) P>
Ajoutez la ligne (15, 16, 'ABC') et ajustez le résultat (si nécessaire).