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

SQL Procédural MySQL Discussion :

Fonction de agrégation et suppression


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 139
    Par défaut Fonction de agrégation et suppression
    Salut à tous !

    J'utilise Mysql 5.0
    J'ai un problème de requête. Cela fait deux mois que je galère dessus en SQL.
    Du coup, j'ai décidé de faire une fonction qui me rendrait les même résultats.

    Le problème est que je ne connais pas bien la structure de ce langage.

    Donc toute proposition est la bienvenue !

    Le problème est le suivant :

    Quand Id_prod=id_prod
    et
    nucdli=nu_doc

    alors je fais la somme des deux ligne

    Ensuite j'efface la ligne ou se trouvait nucdli et je mets mon résultat dans la ligne ou il y a le nu_doc

    Pour expliciter ma requête, voici le jeu de données suivant :

    Attention, ce tableau présente une seule et même table séparés par un trait rouge .
    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
    |id_prod |ty_doc|nu_doc|nucdli|px_com|id_prod|ty_doc |nu_doc | nucdli  |px_com 
    +---------+--------+--------+--------+--------+---------+--------+--------+-----
    | A      | BE   |13604 | NULL |    4 | E     | CDC   |  13661 |  13604 |      3 |                                    |
    | A      | BE   |13604 | NULL |    4 | B     | CDC   |  13361 |  13604 |      2 |                                    |
    | A      | BE   |13604 | NULL |    4 | E     | CDT   |  13360 |  13604 |      1 |                                    |
    | C      | CDA  |13604 | NULL |    3 | E     | CDT   |  13360 |  13604 |      1 |                                    |        |
    | C      | CDA  |13604 | NULL |    3 | E     | CDC   |  13661 |  13604 |      3 |                                    |
    | C      | CDA  |13604 | NULL |    3 | B     | CDC   |  13361 |  13604 |      2 |                                    |
    | D      | CDA  |13604 | NULL |    3 | E     | CDC   |  13661 |  13604 |      3 |                                    |
    | D      | CDA  |13604 | NULL |    3 | B     | CDC   |  13361 |  13604 |      2 |                                    |
    | D      | CDA  |13604 | NULL |    3 | E     | CDT   |  13360 |  13604 |      1 |                                    |
    | E      | FA   |  444 | NULL |    1 | NULL  | NULL  |   NULL |   NULL |   NULL |                                    |
    | E      | BE   |  555 | NULL |    1 | NULL  | NULL  |   NULL |   NULL |   NULL |                                    |
    | E      | CDA  |13604 | NULL |    2 | E     | CDC   |  13661 |  13604 |      3 |                                    |
    | E      | CDA  |13604 | NULL |    2 | B     | CDC   |  13361 |  13604 |      2 |                                    |
    | E      | CDA  |13604 | NULL |    2 | E     | CDT   |  13360 |  13604 |      1 |                                    |
    +---------+--------+--------+--------+--------+---------+--------+------
    Voici le résultat attendu :

    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
    |id_prod |ty_doc|nu_doc|nucdli|px_com|id_prod|ty_doc |nu_doc | nucdli  |px_com 
    +---------+--------+--------+--------+--------+---------+--------+--------+----- 
    | A      | BE   |13604 | NULL |    4 |                                         
    | A      | BE   |13604 | NULL |    4 | B     | CDC   |  13361 |  13604 |      2 |                                    | 
    | A      | BE   |13604 | NULL |    4 |                                         
    | C      | CDA  |13604 | NULL |    3 |                                               | 
    | C      | CDA  |13604 | NULL |    3 |                                         
    | C      | CDA  |13604 | NULL |    3 | B     | CDC   |  13361 |  13604 |      2 |                                    | 
    | D      | CDA  |13604 | NULL |    3 |                                         
    | D      | CDA  |13604 | NULL |    3 | B     | CDC   |  13361 |  13604 |      2 |                                    | 
    | D      | CDA  |13604 | NULL |    3 |           |                                    | 
    | E      | FA   |  444 | NULL |    1 | NULL  | NULL  |   NULL |   NULL |   NULL |                                    | 
    | E      | BE   |  555 | NULL |    1 | NULL  | NULL  |   NULL |   NULL |   NULL |                                    | 
    | E      | CDA  |13604 | NULL |   12 |                                          | 
    | E      | CDA  |13604 | NULL |    6 | B     | CDC   |  13361 |  13604 |      2 |                                    | 
    | E      | FA   |13604 | NULL |    6 |                                          | 
    +---------+--------+--------+--------+--------+---------+--------+------

    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    1/ est-ce que tu veux modifier tes données dans la base, ou bien simplement dans ta requête ?

    2/ sur ton exemple, peux expliquer comment tu passes, par exemple pour le produit A, du premier au second schéma ?

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 139
    Par défaut
    1) Je ne souhaite en aucun cas modifier les valeurs dans ma base.

    2) Pour la ligne suivante:

    A | BE |13604 | NULL | 4


    Elle n'a pas de id_prod identique avec une nucdli égal à son nu_doc donc on ne peux pas faire d'agrégation !

    J'ai un code SQL mais la requête est trop longue à exécuter et ne renvoie pas le bon nombre de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
      k.id_prod,
      k.ty_doc,
      k.nu_doc,
      k.px_com + coalesce(k2.px_com, 0) AS px_com
     
       FROM 
             (...) AS k
             LEFT OUTER JOIN (...) AS k2
               ON k2.nucdli <> ''
              AND k2.nucdli = k.nu_document
    WHERE
        k.nucdli = ''

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Désolé, mais je n'ai toujours rien compris

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 139
    Par défaut
    Ok:

    Dans une seule et même table :

    Je veux une fonction qui parcours la colonne id_prod, nu_doc et nucdli.

    1) Je parcours la colonne id_prod
    Si id_prod = id_prod.

    Alors la fonction regarde si nu_doc=nucdli.

    Si Ok alors, j'additionne les px_com.

    2) Je mets le résultat dans le px_com de la ligne ou il y a le nu_doc pareil au nucdli.

    3)Sinon je continue à parcourir la table.

Discussions similaires

  1. [sql] Erreur n'est pas fonction d'agrégat
    Par Jahprend dans le forum Access
    Réponses: 13
    Dernier message: 05/07/2006, 13h34
  2. [SQL-Serveur][Sybase]Fonctions d'agrégat imbriquées
    Par vincenteraptor dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/06/2006, 09h46
  3. Quel SGBD permet d'écrire ses fonctions d'agrégation SQL?
    Par Machin0410 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 28/03/2006, 17h31
  4. [SQL] Combiner fonction d'agrégation et DISTINCT .
    Par p@radox dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/12/2004, 17h11
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 12h42

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