Alimenter champ si première occurence /Première occurrence d'une

Résolu/Fermé
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 - 22 mars 2014 à 20:28
cyril1982 Messages postés 110 Date d'inscription vendredi 7 mars 2014 Statut Membre Dernière intervention 19 septembre 2018 - 24 mars 2014 à 13:04
Bonjour,

Le titre n'est pas très explicite, mais je vais essayer d'être plus clair.

Soit la requête suivante:

SELECT
decode(t.champ1, 'UPDATE', 'M', 'INSERT', 'C', NULL),
decode(a.champ1, 'UPDATE', 'M', 'INSERT', 'C', NULL),
decode(v.champ1, 'UPDATE', 'M', 'INSERT', 'C', NULL)
t.PAR_N,
a.ID_A,
v.ID_V,
FROM TABLE_T t, TABLE_G g, TABLE_A a, TABLE_V v
WHERE t.ID_G1 = g.ID_G1E (+)
AND t.champ2 = g.champ2 (+)
AND g.ID_G1E = a.ID_G2 (+)
AND g.champ2 = a.champ2 (+)
AND v.ID_A (+) = a.ID_A
AND v.champ2 (+) = a.champ2

Qui donne le résultat:

INSERT INSERT INSERT 51838 80909 224261
INSERT INSERT 51838 80910
INSERT INSERT 51838 80911
INSERT INSERT 51838 80912
UPDATE INSERT INSERT 51834 80896 224258
UPDATE INSERT 51834 80897
UPDATE INSERT 51834 80898
UPDATE INSERT INSERT 51834 80921 224265

Alors que je veux:

INSERT INSERT INSERT 51838 80909 224261
INSERT 51838 80910
INSERT 51838 80911
INSERT 51838 80912
UPDATE INSERT INSERT 51834 80896 224258
INSERT 51834 80897
INSERT 51834 80898
INSERT INSERT 51834 80921 224265

En Gros , que je n'ai insert ou update que sur la première occurrence pour chaque part_n donné (en simple requête sql).

Je vous remercie d'avance.

2 réponses

cyril1982 Messages postés 110 Date d'inscription vendredi 7 mars 2014 Statut Membre Dernière intervention 19 septembre 2018 12
22 mars 2014 à 23:01
Bonsoir,

Je pense que tu peux t'en sortir avec un ROW_NUMBER.
Ta requête devrait ressembler à :

select case when my_id = 1 then col1 else null end,
case when my_id = 1 then col2 else null end,
case when my_id = 1 then col3 else null end,
PAR_N,
ID_A,
ID_V
from (

SELECT 
decode(t.champ1, 'UPDATE', 'M', 'INSERT', 'C', NULL) as col1, 
decode(a.champ1, 'UPDATE', 'M', 'INSERT', 'C', NULL) as col2,
decode(v.champ1, 'UPDATE', 'M', 'INSERT', 'C', NULL) as col3
t.PAR_N,
a.ID_A,
v.ID_V,
ROW_NUMBER()
   OVER (PARTITION BY t.PAR_N ORDER BY a.ID_A) AS my_id
FROM TABLE_T t, TABLE_G g, TABLE_A a, TABLE_V v
WHERE t.ID_G1 = g.ID_G1E (+)
AND t.champ2 = g.champ2 (+)
AND g.ID_G1E = a.ID_G2 (+)
AND g.champ2 = a.champ2 (+)
AND v.ID_A (+) = a.ID_A
AND v.champ2 (+) = a.champ2

) as new_table



Grâce au row_number tu peux faire une action spécifique pour la première occurrence de PAR_N.

Voilà ! En espérant avoir bien compris ce que tu voulais obtenir.
0
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 2
24 mars 2014 à 09:12
Grand merci Cyril1982
0
cyril1982 Messages postés 110 Date d'inscription vendredi 7 mars 2014 Statut Membre Dernière intervention 19 septembre 2018 12
24 mars 2014 à 13:04
De rien :)
0