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 :
Si ma demande n'est pas clair, j'espère pouvoir mieux vous l'expliquer en répondant aux questions.
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
Merci d'avance pour vos réponses.
Partager