Examinez l'exemple de tableau ci-dessous:
ID Value 123 ABC 456 DEF
Je veux le résultat de la requête de sélection comme ci-dessous:
ID Value 123 ABC 456 DEF 456 ABC
Remarque: l'ID n'a que 2 valeurs différentes - "123" et "456". La sélection doit être basée sur la colonne «ID». Si la valeur "123" est présente, les données correspondantes de la colonne "Valeur" doivent être sélectionnées. Sinon, l'ID "456" doit être récupéré.
3 Réponses :
un simple group by vous aidera à obtenir le résultat souhaité
select min(id), value from table group by value
Désolé, oubliez de mentionner que l'ID n'est pas un numéro. C'est une chaîne. Donc min (id) n'est pas utile.
@Viswa le convertit en utilisation numérique TO_NUMBER
La fonction min peut être appliquée non seulement pour les nombres.
La fonction min ne fonctionnera pas si 123 est yyy et 456 est xxx
@ psaraj12. . . Ensuite, utilisez max ()
. Il est seulement possible de répondre à la question qui est posée, et cela semble être la réponse la plus simple.
@GordonLinoff c'est pourquoi j'ai demandé la valeur réelle de l'ID à OP et donné une solution générique
vous laissez les données décider d'utiliser le minimum ou le maximum, ce qui n'est pas une bonne conception
Vous pouvez utiliser ce qui suit si l'ID est une chaîne comme 456 est 'xxx' et 123 est 'yyy' Le violon SQL ici
WITH tt1 AS (SELECT Decode(id, '123', 1, 2) order1, id, value1 FROM tt), tt2 AS (SELECT Min(order1) order1, value1 FROM tt1 GROUP BY value1) SELECT tt1.id, tt1.value1 FROM tt2, tt1 WHERE tt1.value1 = tt2.value1 AND tt1.order1 = tt2.order1;
Quelque chose comme ceci:
select min(id) as id, Value from table group by Value, id
publier la valeur réelle de l'ID s'il s'agit d'une chaîne
Que voulez-vous dire par "Si la valeur" 123 "est présente ? Par rapport à quoi? Vous avez dit que l'Id n'a que 123 ou 456, donc il devrait être présent n'est-ce pas?