Bonjour, je suis assez novice en PL/SQL puisque j'ai surtout l'habitude de faire du SQL

J'ai réussi à faire ce que je voulais, mais pour un soucis de performance, j'aimerais faire évoluer ma requête

Je ne sais pas si cela est possible.

20060928090404Esc 854 OUI OUI
20060928090404Esc 854 OUI NON

Voici un exemple de mon problème
Ma requête me procure certains doublons de ce genre.

Le 1er champ : n° releve (dans les tables)
Le 2nd champ : code (dans les tables)
Le 3ème champ : menace (fait suite à un decode)
Le 4ème champ : influence (encore un decode)

Je voudrais faire en sorte que :

Si un n° de releve a une influence en OUI et en NON, retenir que la ligne avec le OUI.
Si un n° de releve a une influence avec uniquement NON, le garder.
Si un n° de releve a une influence avec uniquement OUI, le garder.

Je veux que la ligne en cas de doublon n'apparaisse pas dans le résultat.


J'ai dit que j'ai réussi à avoir le résultat escompté, mais grâce à Excel.
J'ai créé une macro qui à supprimer les doublons :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Sub Suppression_Doublon()
'
' Suppression_Doublon Macro
'
 
    Dim i As Integer
    With ActiveSheet
 
    For i = 10000 To 2 Step -1
    'Row To 2 Step -1 si tu as une ligne d'en-tête que tu veux conserver
 
        If (.Cells(i, "A").Value = .Cells(i + 1, "A").Value) And (.Cells(i + 1, "E").Text = "NON") Then Rows(i + 1).Delete
        Next i
 
    End With
End Sub

Mais j'aimerais que ces doublons n'apparaissent pas dans le résultat de la requête dès le départ.



Voici la requête SQL actuelle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
SELECT DISTINCT i.cd_releve, v.code_corine, v.LB_VEGETATION
,decode((COUNT (DISTINCT m.TYPE_MENACE)),'0','NON','OUI') AS nb_menace_non_oui
,decode((UPPER(m.INFLUENCE) || ' ' || UPPER(m.menaces_active)),'NÉGATIF MENACE ACTIVE', 'OUI', 'NON') AS CONDITION
 
FROM I202_VEGETATION_STATION v, I202 i LEFT JOIN I202_MENACE_STATION m ON i.cd_releve = m.cd_releve
 
WHERE i.cd_releve = v.cd_releve
 
GROUP BY i.cd_releve, v.code_corine, v.LB_VEGETATION, decode((UPPER(m.INFLUENCE) || ' ' || UPPER(m.menaces_active)),'NÉGATIF MENACE ACTIVE', 'OUI', 'NON')
ORDER BY i.cd_releve ASC, CONDITION DESC
Si ma demande n'est pas clair, j'espère pouvoir mieux vous l'expliquer en répondant aux questions.

Merci d'avance pour vos réponses.