IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Création d'une nouvelle ligne par une somme de 2 autres lignes dans ma table selon une condition


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Création d'une nouvelle ligne par une somme de 2 autres lignes dans ma table selon une condition
    Bonjour,

    J'aimerais de l'aide pour bonifier l'une de mes requêtes.

    Voici ma table:

    Nom : table.png
Affichages : 205
Taille : 3,4 Ko


    J'aimerais pouvoir ajouter une nouvelle ligne qui fait la somme d'un produit pour mes endroits, soit endroit A + B. Par contre il arrive que je n'ai pas les 2 endroits pour chacun de mes produits et avec ma requête actuel je n'arrive pas à créer nouvelle ligne désirée.

    J'aimerais arriver à faire ceci:

    Nom : table-desiree.png
Affichages : 192
Taille : 5,0 Ko


    Est-ce que quelqu'un peut m'aider svp.

    Voici ma requête actuelle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT into matable (noproduit, endroit, stock)
    SELECT MaTable_A.noproduit AS noproduit, 
    "AB" AS endroit, 
    (A_stock + B_stock) AS stock
    FROM 
    (SELECT id, noproduit, stock AS A_stock FROM matable WHERE endroit="A") AS MaTable_A
    JOIN 
    (SELECT id, noproduit, stock AS A_stock FROM matable WHERE endroit="B") AS MaTable_B
    ON MaTable_A.noproduit = MaTable_B.noproduit

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Ce serait plus simple comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT into matable (noproduit, endroit, stock)
    SELECT  noproduit   AS noproduit
        ,   'AB'        AS endroit
        ,   SUM(stock)  AS stock
    FROM    matable 
    WHERE   endroit IN ('A', 'B')
    GROUP BY noproduit
    Toutefois, est-il réellement nécessaire d'ajouter ces lignes dans la table ?
    Si la valeur du stock d'un produit devait changer, le stock de la ligne de regroupement ne serait plus correct...
    Effectuer cet ajout de lignes par le biais d'une vue serait certainement plus avisé.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Deux remarques :

    - je ne vois pas l'intérêt de stocker cette information, il s'agit d'une information calculée, c'est donc une redondance. Si pour un produit, un nouveau stockage apparait pour un nouvel endroit, ou une quantité stockée change, alors cette ligne devient fausse.
    - la colonne endroit, pour la ligne résultante, devient une donnée non atomique, c'est contraire aux principes de normalisation d'une base relationnelle, en l'occurrence c'est un viol de la 1ère forme normale !

    Deux bonnes raisons pour ne pas faire ce genre d'exercice !

    EDIT : j'ajoute une contrainte technique
    Si la colonne "endroit" est de type par exemple char(4) et que vous trouvez plus de 4 lieux de stockage ou que certains code lieux de stockage font plus d'un caractère, vous ne pourrez pas concaténer tous les codes endroit dans la ligne résultante

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/11/2017, 16h08
  2. [AC-2007] Recuperer une info dans 3 tables selon une date donnée
    Par ulovb dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 06/10/2015, 11h35
  3. Réponses: 16
    Dernier message: 29/09/2009, 21h21
  4. Lancer une nouvelle fenêtre par bouton ?
    Par Lamy D dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/09/2009, 23h28
  5. ajouter une nouvelle colonne par un SELECT
    Par maysa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/09/2006, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo