Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire une comparaison entre un groupe de table

Sujet résolu
    13 avril 2021 à 17:46:45

    Bonjour à tous,

    je souhaiterais pouvoir comparer différentes valeurs et afficher les valeurs qui sont différentes.

    En effet  des tables pour les achats les ventes et les régularisations et j'ai une table delta qui à l'insertion de chaque données dans les 3 tables reçois la même valeur qui vient juste d'être insérer.

    Le delta me sert pour l'affichage du stock des articles.

    Alors je souhaiterais avec une requête pourvoir comparer les valeurs pour chaque article dans la table delta et dans les 3 autres tables et afficher les valeurs qui sont différentes.

    Voici ma requête pour avoir la valeur du delta pour chaque article

    select a.DesignationArticle, coalesce(sum(d.valeurdelta),0), d.IDArticle
    from delta d 
    inner join .article a on a.IDArticle=d.IDArticle
    where d.DateCrea between '2020-12-01' and '2021-04-13' and d.deltavalide=1 
    group by d.idarticle;

    Voici par la suite ma requête pour avoir la valeur pour un article dans les 3 tables (fournisseur, vente et régularisation)

    SELECT
    ifnull((
    SELECT sum(df.QuantiteDocFseur)  as total
    from detaildocumentfournisseur df 
    where df.idarticle=15418),0)
    - 
    IFNULL((select coalesce(sum(dv.QuantiteVendue),0)
    from detailvente dv  
    where  dv.idarticle=15418),0)
    +
    IFNULL((select coalesce(sum(dr.QuantiteRegularisation),0)
    from detailregularisation dr
    where dr.idarticle=15418),0) as total
    ;

    Je suis bloqué à ce stade car je ne sais comment faire la requête pour m'afficher juste les articles dans la valeurs du delta est différentes de la valeur de la somme des tables (fournisseurs, ventes et régularisations)

    Au niveau du delta il y a deux clé étrangères communes qui sont idarticle lié à article et  idoperationdelta  lié a fournisseur, vente et regularisation

    • Partager sur Facebook
    • Partager sur Twitter
      13 avril 2021 à 18:00:05

      Bonjour,

      Avec des sous-requêtes et une clause HAVING :

      SELECT
      	a.IDArticle,
      	a.DesignationArticle,
      	SUM( d.valeurdelta ) AS sum_delta,
      	df.total - dv.total + dr.total AS total_detail
      FROM
      	article a
      		INNER JOIN delta d
      			ON a.IDArticle=d.IDArticle
      		LEFT JOIN (
      				SELECT
      					idarticle,
      					SUM( QuantiteDocFseur ) as total
      				FROM detaildocumentfournisseur
      				GROUP BY idarticle
      			) df
      			ON a.idarticle = df.idarticle
      		LEFT JOIN (
      				SELECT
      					idarticle,
      					SUM( QuantiteVendue ) as total
      				FROM detailvente
      				GROUP BY idarticle
      			) dv
      			ON a.idarticle = dv.idarticle
      		LEFT JOIN (
      				SELECT
      					idarticle,
      					SUM( QuantiteRegularisation ) as total
      				FROM detailregularisation
      				GROUP BY idarticle
      			) dr
      			ON a.idarticle = dr.idarticle
      WHERE
      	d.DateCrea BETWEEN '2020-12-01' AND '2021-04-13'
      	AND d.deltavalide = 1
      GROUP BY d.idarticle
      HAVING SUM( d.valeurdelta ) <> df.total - dv.total + dr.total

      -
      Edité par Benzouye 13 avril 2021 à 18:00:36

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        13 avril 2021 à 18:30:55

        Merci Benzouye

        Mais dans la clause HAVING j'ai remplacé df.total - dv.total + dr.total par total_detail

        -
        Edité par AlFaddi 13 avril 2021 à 18:46:24

        • Partager sur Facebook
        • Partager sur Twitter
          13 avril 2021 à 23:25:15

          Oui, c'est plus court, mais selon les SGBD les alias ne sont pas utilisables dans la clause HAVING ... Du coup je préfère être sûr...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            14 avril 2021 à 16:41:34

            J'ajoute aussi que le champs deltavalide est un champs de la table delta qui s'il est a 1 atteste que la valeur a bien été prise en compte dans la table delta.

            • Partager sur Facebook
            • Partager sur Twitter

            Faire une comparaison entre un groupe de table

            × 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