Bonjour, J'ai une sql qui me donne des résultats erronés comme s'il additionnait ou multipliait le résultat plusieurs fois car les valeurs retournées sont trop élevées. or en regardant ma syntaxe je la trouvait logique.
mais on m'a dit que je multipliait le résultat primaire par le nombre de ligne de la table stock pour chaque lien.
voici la requete:
donc on m'a preconnisé cette requete avec un CTE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT e.CODE_PRODUIT "Code Produit",e.DESIGNATION "Designation", to_char(NVL(round(sum(t.QTE_VEN)),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Qte Vendue", to_char(NVL(round(sum(t.VALEUR_VENTE)),0) ,'999G999G999G999', 'nls_numeric_characters='', ''') "C.A.H.T", to_char(NVL( round(sum(t.MARGE_HT)),0) ,'999G999G999G999', 'nls_numeric_characters='', ''') "Marge HT", to_char(NVL(round(sum(s.QUANTITE) ),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Qte Stock", to_char(NVL(round(sum(s.VALEUR_PRIX_REV) ),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Valeur du stock" FROM PRODUIT e LEFT OUTER JOIN VENTE_JOUR t ON(e.CODE_PRODUIT=t.CODE_PRODUIT AND t.DATE_GENERATION BETWEEN '". $_POST['date'] . "' AND '" . $_POST['date1'] . "') LEFT OUTER JOIN STOCK s ON(e.CODE_PRODUIT=s.CODE_PRODUIT AND s.DATE_GENERATION ='". $_POST['date1'] . "' ) GROUP BY e.CODE_PRODUIT,e.DESIGNATION ORDER BY NVL(round(sum(t.VALEUR_VENTE)),0) DESC;Cependant cette requête mais énormément de temps s'afficher(2 à 3mn) pour pratiquement 3000 produits hors le nombre de produit augmentera donc d'où ma question comment optimisé cette requête CTE ou existe t-il un autre moyen soit en améliorant ma première requête ou une autre requête sql pouvant résoudre mon problème
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 WITH T AS ( SELECT e.CODE_PRODUIT "Code Produit",e.DESIGNATION "Designation", to_char(NVL(round(sum(t.QTE_VENDUE)),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Qte Vendue", to_char(NVL(round(sum(t.VALEUR_VENTE)),0) ,'999G999G999G999', 'nls_numeric_characters='', ''') "C.A.H.T", to_char(NVL( round(sum(t.MARGE_HT)),0) ,'999G999G999G999', 'nls_numeric_characters='', ''') "Marge HT", to_char(round((sum(t.VALEUR_VENTE)-sum(t.VALEUR))*100/nullif(sum(t.VALEUR_VENTE),0),2),'999G999G999G999D99', 'nls_numeric_characters='', ''') "TAUX" FROM PRODUIT e LEFT OUTER JOIN VENTE_JOUR t ON(e.CODE_PRODUIT=t.CODE_PRODUIT) AND t.DATE_GENERATION BETWEEN '". $_POST['date'] . "' AND '" . $_POST['date1'] . "' GROUP BY e.CODE_PRODUIT,e.DESIGNATION ORDER BY NVL(round(sum(t.VALEUR_VENTE)),0) DESC ) SELECT T.*, to_char(NVL(round(sum(s.QUANTITE) ),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Qte Stock", to_char(NVL(round(sum(s.VALEUR_PRIX_REV) ),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Valeur du stock" FROM T LEFT OUTER JOIN STOCK s ON(e.CODE_PRODUIT=s.CODE_PRODUIT AND s.DATE_GENERATION ='". $_POST['date1'] . "' ) GROUP BY T."Code Produit", T."Designation", T."Qte Vendue", T."C.A.H.T", T."Marge HT", T."TAUX" ORDER BY NVL("C.A.H.T", 0) DESC. merci de vos aident
Je precise que mon SGBDR est ORACLE
Partager