Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requete qui ne fonctionne pas

ORACLE

    26 février 2021 à 14:27:16

    Bonjour à tous,

    Je suis bloqué depuis deux jours sur une soustraction à faire donc je m'explique, j'ai deux table une table du stock physique et une table qui marque les reste à préparé et donc mon opération est la suivante pour avoir le stock disponible je dois faire le stock physique - le reste à préparé = stock disponible mais j'ai remarqué que "ma requête fait bien ma demande".

    Une petite explication s'impose :):

    Donc j'ai mon stock physique pour la taille 5(Prod_stok.QTE_5) par exemple qui est à 278.

    ensuite mon reste à préparé(qui découle de cette requête : 

    SELECT  SUM( cde_cli_lign.QTE_T4)
    FROM cde_cli_lign
    WHERE CODE_ART_COM ='86545D'
    AND code_colm = '300'
    AND flag_sold is NULL
    AND flag_ann is NULL
    AND (flag_pable != 0
           OR (flag_pable = 0 AND flag_fable = 1)
           OR (flag_pable = 0 AND flag_fact = 1)
    );

    ) mais qui à été rajouter dans cette grande requête :

    select distinct
    ART_COM_TEXT.LIB AS "gamme",
    LIPRO.LIB AS "type_produit",
    PROD_STOK.CODE_ART_COM AS "code_article",
    PROD_STOK.CODE_COLM AS "code_couleur",
    COLCOM.LIB AS "couleur",
    ART_COM.CODE_TAIL AS "code_taille",
    PROD_STOK.QTE_1 - Sum(CDE_CLI_LIGN.QTE_T1) AS "qt1",
    PROD_STOK.QTE_2 - Sum(CDE_CLI_LIGN.QTE_T2) AS "qt2",
    PROD_STOK.QTE_3 - Sum(CDE_CLI_LIGN.QTE_T3) AS "qt3",
    PROD_STOK.QTE_4 - Sum(CDE_CLI_LIGN.QTE_T4) AS "qt4",
    PROD_STOK.QTE_5 - Sum(CDE_CLI_LIGN.QTE_T5) AS "qt5",
    PROD_STOK.QTE_6 - Sum(CDE_CLI_LIGN.QTE_T6) AS "qt6",
    PROD_STOK.QTE_7 - Sum(CDE_CLI_LIGN.QTE_T7) AS "qt7",
    PROD_STOK.QTE_8 - Sum(CDE_CLI_LIGN.QTE_T8) AS "qt8",
    PROD_STOK.QTE_9 - Sum(CDE_CLI_LIGN.QTE_T9) AS "qt9",
    PROD_STOK.QTE_10 - Sum(CDE_CLI_LIGN.QTE_T10) AS "qt10",
    PROD_STOK.QTE_11 - Sum(CDE_CLI_LIGN.QTE_T11) AS "qt11",
    PROD_STOK.QTE_12 - Sum(CDE_CLI_LIGN.QTE_T12) AS "qt12",
    PROD_STOK.QTE_13 - Sum(CDE_CLI_LIGN.QTE_T13) AS "qt13",
    PROD_STOK.QTE_14 - Sum(CDE_CLI_LIGN.QTE_T14) AS "qt14",
    CASE WHEN PRIX_VENT.PRIX_VENT_T1 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T1 / 100 END AS "prix_t1",
    CASE WHEN PRIX_VENT.PRIX_VENT_T2 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T2 / 100 END AS "prix_t2",
    CASE WHEN PRIX_VENT.PRIX_VENT_T3 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T3 / 100 END AS "prix_t3",
    CASE WHEN PRIX_VENT.PRIX_VENT_T4 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T4 / 100 END AS "prix_t4",
    CASE WHEN PRIX_VENT.PRIX_VENT_T5 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T5 / 100 END AS "prix_t5",
    CASE WHEN PRIX_VENT.PRIX_VENT_T6 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T6 / 100 END AS "prix_t6",
    CASE WHEN PRIX_VENT.PRIX_VENT_T7 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T7 / 100 END AS "prix_t7",
    CASE WHEN PRIX_VENT.PRIX_VENT_T8 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T8 / 100 END AS "prix_t8",
    CASE WHEN PRIX_VENT.PRIX_VENT_T9 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T9 / 100 END AS "prix_t9",
    CASE WHEN PRIX_VENT.PRIX_VENT_T10 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T10 / 100 END AS "prix_t10",
    CASE WHEN PRIX_VENT.PRIX_VENT_T11 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T11 / 100 END AS "prix_t11",
    CASE WHEN PRIX_VENT.PRIX_VENT_T12 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T12 / 100 END AS "prix_t12",
    CASE WHEN PRIX_VENT.PRIX_VENT_T13 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T13 / 100 END AS "prix_t13",
    CASE WHEN PRIX_VENT.PRIX_VENT_T14 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T14 / 100 END AS "prix_t14",
    PROD_COM_GENC.GENC_T1 AS "gencod_t1",
    PROD_COM_GENC.GENC_T2 AS "gencod_t2",
    PROD_COM_GENC.GENC_T3 AS "gencod_t3",
    PROD_COM_GENC.GENC_T4 AS "gencod_t4",
    PROD_COM_GENC.GENC_T5 AS "gencod_t5",
    PROD_COM_GENC.GENC_T6 AS "gencod_t6",
    PROD_COM_GENC.GENC_T7 AS "gencod_t7",
    PROD_COM_GENC.GENC_T8 AS "gencod_t8",
    PROD_COM_GENC.GENC_T9 AS "gencod_t9",
    PROD_COM_GENC.GENC_T10 AS "gencod_t10",
    PROD_COM_GENC.GENC_T11 AS "gencod_t11",
    PROD_COM_GENC.GENC_T12 AS "gencod_t12",
    PROD_COM_GENC.GENC_T13 AS "gencod_t13",
    PROD_COM_GENC.GENC_T14 AS "gencod_t14"
    FROM PROD_STOK
    INNER JOIN PRIX_VENT ON	(PRIX_VENT.CODE_ART_COM = PROD_STOK.CODE_ART_COM) and (prix_vent.code_colm = PROD_STOK.code_colm )
    INNER JOIN ART_COM_TEXT ON ART_COM_TEXT.CODE_ART_COM = PROD_STOK.CODE_ART_COM
    INNER JOIN ART_COM ON ART_COM.CODE_ART_COM = PROD_STOK.CODE_ART_COM
    INNER JOIN COLCOM ON COLCOM.CODE_COLM = PROD_STOK.CODE_COLM
    INNER JOIN PROD_COM_GENC ON (PROD_COM_GENC.CODE_ART_COM = PROD_STOK.CODE_ART_COM AND PROD_COM_GENC.CODE_COLM = PROD_STOK.CODE_COLM)
    INNER JOIN LIPRO ON	LIPRO.CODE_LIGN_PROD = ART_COM.CODE_LIGN_PROD
    INNER JOIN CDE_CLI_LIGN ON (CDE_CLI_LIGN.CODE_ART_COM = PROD_STOK.CODE_ART_COM AND CDE_CLI_LIGN.CODE_COLM = PROD_STOK.CODE_COLM)
    WHERE PROD_STOK.CODE_MAGP <> 'ZZ'
    AND PROD_STOK.CODE_ART_COM ='86545D'
    AND PRIX_VENT.CODE_TARI = 'TWEB'
    AND ART_COM.SAIS in('00P','21E')
    AND ART_COM.ETAT ='0'
    AND PRIX_VENT.CODE_PER_TAR = '21E'	
    AND PROD_STOK.CODE_LIEU in('BVT','FS1')
    AND prod_stok.code_magp in('CO','LI')
    AND PROD_STOK.TYP_ENRG = '0'
    AND PROD_STOK.CHOI = '1'
    AND CDE_CLI_LIGN.FLAG_SOLD is NULL AND CDE_CLI_LIGN.FLAG_ANN is NULL AND (CDE_CLI_LIGN.FLAG_PABLE != 0 OR (CDE_CLI_LIGN.FLAG_PABLE = 0 AND CDE_CLI_LIGN.FLAG_FABLE = 1) OR (CDE_CLI_LIGN.FLAG_PABLE = 0 AND CDE_CLI_LIGN.FLAG_FACT = 1))
    group by ART_COM_TEXT.LIB,
    LIPRO.LIB,
    PROD_STOK.CODE_ART_COM,
    PROD_STOK.CODE_COLM,
    COLCOM.LIB, 
    ART_COM.CODE_TAIL,
    PROD_STOK.QTE_1,
    PROD_STOK.QTE_2,
    PROD_STOK.QTE_3,
    PROD_STOK.QTE_4,
    PROD_STOK.QTE_5,
    PROD_STOK.QTE_6,
    PROD_STOK.QTE_7,
    PROD_STOK.QTE_8,
    PROD_STOK.QTE_9,
    PROD_STOK.QTE_10,
    PROD_STOK.QTE_11,
    PROD_STOK.QTE_12,
    PROD_STOK.QTE_13,
    PROD_STOK.QTE_14,
    CASE WHEN PRIX_VENT.PRIX_VENT_T1 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T1 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T2 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T2 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T3 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T3 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T4 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T4 / 100 END, 
    CASE WHEN PRIX_VENT.PRIX_VENT_T5 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T5 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T6 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T6 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T7 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T7 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T8 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T8 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T9 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T9 / 100 END, 
    CASE WHEN PRIX_VENT.PRIX_VENT_T10 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T10 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T11 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T11 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T12 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T12 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T13 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T13 / 100 END,
    CASE WHEN PRIX_VENT.PRIX_VENT_T14 = 0 THEN NULL ELSE PRIX_VENT.PRIX_VENT_T14 / 100 END, 
    PROD_COM_GENC.GENC_T1,
    PROD_COM_GENC.GENC_T2,
    PROD_COM_GENC.GENC_T3,
    PROD_COM_GENC.GENC_T4,
    PROD_COM_GENC.GENC_T5, 
    PROD_COM_GENC.GENC_T6,
    PROD_COM_GENC.GENC_T7,
    PROD_COM_GENC.GENC_T8,
    PROD_COM_GENC.GENC_T9,
    PROD_COM_GENC.GENC_T10, 
    PROD_COM_GENC.GENC_T11,
    PROD_COM_GENC.GENC_T12,
    PROD_COM_GENC.GENC_T13,
    PROD_COM_GENC.GENC_T14
    ORDER BY "gamme",
    "code_article",
    "couleur"

    J'ai marque en rouge ce que j'ai rajouter.

    Pour finir donc mon reste à prépare est égale à 18(ce que la petite requête me donne)

    et donc dans la grande requête j'ai fait la soustraction "logique" PROD_STOK.QTE_4 - Sum(CDE_CLI_LIGN.QTE_T4) AS "qt4" qui doit normalement me retourné 260 mais j'ai 242.

    Et donc je me suis dit pourquoi pas essayé 260 - 18 = 242 donc la requête fait bien sont job mais au mauvais moment :(

    Merci d'avance pour vos réponses.


     

    • Partager sur Facebook
    • Partager sur Twitter
      26 février 2021 à 18:37:26

      Bonjour,

      C'est quoi ces colonnes T1, T2, T... ???

      Cela pue le problème de conception ... Du coup, avant d'essayer de résoudre un problème que tu n'aurais pas si ta base était bien conçues, je te propose de bien reprendre la modélisation de celle-ci ... on verra le reste après ...

      Peux-tu reprendre ta base pour normaliser ces 14 colonnes en une table annexe ?

      Sinon, peux-tu nous donner ton modèle actuel (tables, colonnes, types, contraintes) ?

      -
      Edité par Benzouye 26 février 2021 à 18:37:49

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        26 février 2021 à 20:30:51

        Salut,

        C'est une base de donnée crée par une entreprise donc je ne suis pas le créateur et je suis d'accord avec toi la bases est mal faite et pour répondre à ta question ce sont des chiffres qui office de code EAN ou code barre si tu veux.

        Quel table veut tu que je poste ?

        • Partager sur Facebook
        • Partager sur Twitter
          26 février 2021 à 21:33:04

          Toutes les tables concernées par cette requête, c'est surtout pour déterminer les cardinalités...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

          Requete qui ne fonctionne pas

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown