0
votes

Comment obtenir une valeur distincte pour une colonne sur la base d'une autre colonne de Oracle

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: xxx

 Entrez la description de l'image ici <> < / a>


1 commentaires

Ajoutez la ligne (15, 16, 'ABC') et ajustez le résultat (si nécessaire).


5 Réponses :


1
votes

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)


2 commentaires

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.



0
votes

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


0 commentaires

0
votes
select distinct COL1, if(COL1 = COL2, COL3, COL1) as result
from table1

0 commentaires

0
votes

avec une jointure auto: xxx pré>

Voir le Démo .
Résultats: P>

> COL1 | COL3
> ---: | :---
>   11 | ABC 
>   12 | ABC 
>   13 | BDG 
>   14 | DEF 
>   15 | CEG 


0 commentaires

1
votes

faire un groupe par pour obtenir des valeurs de col1 distinctes.

Utilisation coalesce () Pour renvoyer la valeur COL3 s'il existe une ligne COL1 = COL2, sinon retourner La valeur maximale COL3 pour le COL1. (Pourrait utiliser min () aussi, si c'est mieux.) xxx


0 commentaires