Bonjour

J'ai essayé, afin de mieux la comprendre pour la modifier, de réécrire une requete oracle 8i à la mode ANSI (pour Oracle 10g). Malheureusement une erreur est apparue après la réécriture...

Voilà la requete originale :

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
18
19
20
21
22
23
24
25
26
27
28
29
SELECT TO_NUMBER(NVL(PL.HEURE_DEPART,'2359')) AS HEURE_DEPART, 
       PL.COD_LIGNE_EXPEDITION AS LIGNE_EXPEDITION, 
       PL.COD_TOURNEE, T.NOM_TOURNEE, PL.COD_TRANSPORTEUR, 
       TR.NOM_TRANSPORTEUR, SUM(NVL(EX.NB_COLIS_PREVU,0)) AS NB_COLIS_PREVU, 
       SUM(NVL(EX.NB_COLIS_PREPARE,0)) AS NB_COLIS_PREPARE, 
       SUM(NVL(EX.NB_COLIS_PREVU,0)-NVL(EX.NB_COLIS_PREPARE,0)) AS NB_COLIS_RESTANT, 
       SUM(DECODE(EX.COD_SOC_COM, '5', 1, 0)) AS NB_COMMANDE, 
       SUM(DECODE(EX.COD_SOC_COM, '5', 1, 0) *(1 - NVL(EX.IS_PREVISION, 0))) AS NB_SERVIS, 
       SUM(DECODE(EX.COD_SOC_COM, '5',1,0) * NVL(EX.IS_BL_RECU,0)) AS NB_BL, 
       SUM(DECODE(EX.COD_SOC_COM, '5', 1, 0))-SUM(DECODE(EX.COD_SOC_COM ,'5',1,0) * NVL(EX.IS_BL_RECU,0)) AS TOT,
       SUM(decode(ELC.COD_SOC_COM, '5', 1,  0)) AS IS_EDITE 
 
FROM REF_EXPEDITION EX, REF_PLAN_LIGNE PL, REF_EDITE_LISTE_COLISAGE ELC, REF_TOURNEES_TRANSPORT T, 
     REF_TRANSPORTEURS TR
WHERE EX.DATE_EXPEDITION = ELC.DATE_EDITION_LISTE (+) 
  AND EX.COD_SOC_COM = ELC.COD_SOC_COM (+) 
  AND EX.NUM_TOURNEE = ELC.COD_TOURNEE (+) 
  and EX.NUM_TOURNEE = PL.COD_TOURNEE 
  and EX.NUM_TOURNEE = T.COD_TOURNEE 
  AND PL.COD_TRANSPORTEUR = TR.COD_TRANSPORTEUR 
  AND EX.DATE_EXPEDITION = TO_DATE('08/12/2007','dd/mm/yyyy') 
  AND DATE_DEBUT <= TO_DATE('08/12/2007','dd/mm/yyyy') 
  AND DATE_FIN >= TO_DATE('08/12/2007','dd/mm/yyyy') 
  AND COD_JOUR IN (0,1) AND PL.COD_SITE_LOGISTIQ = '907' 
  AND PL.COD_TOURNEE in (214,221,286,295) 
  AND (EX.NO_ZONE_TARIF_TRANSPORT = '5' OR  EX.COD_SOC_COM = '5')  
 
GROUP BY PL.HEURE_DEPART, PL.COD_LIGNE_EXPEDITION, PL.COD_TOURNEE, T.NOM_TOURNEE, PL.COD_TRANSPORTEUR,
         TR.NOM_TRANSPORTEUR
Et voici la requête que j'ai réécrite :

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
SELECT TO_NUMBER(NVL(PL.HEURE_DEPART,'2359')) AS HEURE_DEPART, 
       PL.COD_LIGNE_EXPEDITION AS LIGNE_EXPEDITION, 
       PL.COD_TOURNEE, T.NOM_TOURNEE, PL.COD_TRANSPORTEUR, 
       TR.NOM_TRANSPORTEUR, SUM(NVL(EX.NB_COLIS_PREVU,0)) AS NB_COLIS_PREVU, 
       SUM(NVL(EX.NB_COLIS_PREPARE,0)) AS NB_COLIS_PREPARE, 
       SUM(NVL(EX.NB_COLIS_PREVU,0)-NVL(EX.NB_COLIS_PREPARE,0)) AS NB_COLIS_RESTANT, 
       SUM(DECODE(EX.COD_SOC_COM, 5, 1, 0)) AS NB_COMMANDE, 
       SUM(DECODE(EX.COD_SOC_COM, 5, 1, 0) *(1 - NVL(EX.IS_PREVISION, 0))) AS NB_SERVIS, 
       SUM(DECODE(EX.COD_SOC_COM, 5, 1, 0) * NVL(EX.IS_BL_RECU,0)) AS NB_BL, 
       SUM(DECODE(EX.COD_SOC_COM, 5, 1, 0))-SUM(DECODE(EX.COD_SOC_COM ,'5',1,0) * NVL(EX.IS_BL_RECU,0)) AS TOT,
       SUM(decode(ELC.COD_SOC_COM, 5, 1, 0)) AS IS_EDITE
 
FROM REF_EXPEDITION EX
RIGHT OUTER JOIN REF_EDITE_LISTE_COLISAGE ELC
        ON EX.DATE_EXPEDITION = ELC.DATE_EDITION_LISTE
RIGHT OUTER JOIN REF_EDITE_LISTE_COLISAGE ELC
        ON EX.COD_SOC_COM = ELC.COD_SOC_COM
RIGHT OUTER JOIN REF_EDITE_LISTE_COLISAGE ELC
        ON EX.NUM_TOURNEE = ELC.COD_TOURNEE
INNER JOIN REF_PLAN_LIGNE PL
        ON EX.NUM_TOURNEE = PL.COD_TOURNEE
            INNER JOIN REF_TRANSPORTEURS TR
                    ON PL.COD_TRANSPORTEUR = TR.COD_TRANSPORTEUR          
INNER JOIN REF_TOURNEES_TRANSPORT T
        ON EX.NUM_TOURNEE = T.COD_TOURNEE 
 
     WHERE EX.DATE_EXPEDITION = TO_DATE('08/12/2007','dd/mm/yyyy') 
       AND PL.DATE_DEBUT <= TO_DATE('08/12/2007','dd/mm/yyyy') 
       AND PL.DATE_FIN >= TO_DATE('08/12/2007','dd/mm/yyyy') 
       AND PL.COD_JOUR IN (0,1) 
       AND PL.COD_SITE_LOGISTIQ = '907' 
       AND PL.COD_TOURNEE IN (214,221,286,295) 
       AND (EX.NO_ZONE_TARIF_TRANSPORT = '5' OR  EX.COD_SOC_COM = '5')  
 
  GROUP BY PL.HEURE_DEPART, PL.COD_LIGNE_EXPEDITION, PL.COD_TOURNEE, T.NOM_TOURNEE, PL.COD_TRANSPORTEUR,
         TR.NOM_TRANSPORTEUR
Une erreur "ORA-00918: column ambiguously defined" est venue se glisser entretemps alors que toutes mes colonnes sont préfixées... Il me semble pourtant que cette erreur apparaît lorsqu'on ne préfixe pas les colonnes avec les noms de table et que deux tables ont des colonnes au nom identique non ?

Merci de votre aide

David