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

Langage SQL Discussion :

Requête récursive SQL


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juillet 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête récursive SQL
    Bonjour à tous,

    Je me permet de poster sur ce forum car je ne suis pas un spécialiste SQL mais j'ai une demande à vous faire. Dans une seul table qui s'appelle formule, j'ai plusieurs lignes. Le colonne 1 est le produit a fabriqué, la colonne 2 est le composant pour faire le produit et dans la colonne 3 la quantité de chaque composant. J'ai donc un article qui s'appelle 03330 qui composé de 50% de MP1, de 40% de MP2 et de 10% de I3. MP veut dire matière première, et I veut dire intermédiaire. J'ai aussi dans la même table la produit 033320 qui est 20kg de 03330. Voici donc ma table en CSV:
    Article Composant Qte
    03330 MP1 0,5
    03330 MP2 0,4
    03330 I3 0,1
    I3 MP4 0,8
    I3 MP2 0,2
    033320 03330 20

    Ma question est comment je peux sortir la quantité de MP2 pour fabriquer l'article 033320 ? J'ai essayer de faire des jointures mais il me manque toujours des données puisque la MP2 est 20% de I3 qui lui même est à 10% dans 03330. Et donc pour l'article 033320 c'est 20 fois ça.
    Je ne vois pas comment je peux faire.
    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 151
    Points : 16 434
    Points
    16 434
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juillet 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    C'est du MS-SQL

    Citation Envoyé par Waldar Voir le message
    Quel est votre SGBD ?

  4. #4
    Modérateur

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 151
    Points : 16 434
    Points
    16 434
    Par défaut
    Essayez ainsi :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    create table ArticleComposant
    ( Article   varchar(10)
    , Composant varchar(10)
    , Qte       decimal(5,3)
    );
     
    insert into ArticleComposant values
    ('03330' , 'MP1'  ,  0.5),
    ('03330' , 'MP2'  ,  0.4),
    ('03330' , 'I3'   ,  0.1),
    ('I3'    , 'MP4'  ,  0.8),
    ('I3'    , 'MP2'  ,  0.2),
    ('033320', '03330', 20.0);
     
    with cte_recurs (ArticleRoot, Article, Composant, Qte, lvl) as
    (
    select Article, Article, Composant, Qte, 1
      from ArticleComposant
     where Article = '033320'
     union all
    select cte.ArticleRoot
         , acp.Article
         , acp.Composant
         , cast(cte.Qte * acp.Qte as decimal(5,3))
         , cte.lvl + 1
      from cte_recurs       as cte
      join ArticleComposant as acp on cte.Composant = acp.Article
     where cte.lvl < 10
    )
      select ArticleRoot, Composant
           , sum(Qte) as Qte
           , count(*) as presence
        from cte_recurs
    group by ArticleRoot, Composant;
     
    ArticleRoot  Composant  Qte    Presence
    -----------  --------   -----  --------
    033320        03330     20.000        1
    033320        I3         2.000        1
    033320        MP1       10.000        1
    033320        MP2        8.400        2
    033320        MP4        1.600        1

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 426
    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 : 7 426
    Points : 23 905
    Points
    23 905
    Billets dans le blog
    2
    Par défaut
    La structure de la table impose que l'unité de mesure de la quantité soit toujours la même, sans quoi aucun calcul n'est possible...
    A vérifier car c'est rarement le cas (à moins qu'il s'agisse d'un exercice scolaire, auquel cas je comprends mieux)

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/05/2006, 19h01
  2. SQL SERVER 2005 -- requête récursive avec bcp données
    Par evans dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2006, 19h01
  3. [SQL Server]Problème avec une requête récursive
    Par evans dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/04/2006, 20h16
  4. [SQL Server] Requête récursive
    Par margagn dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/04/2006, 04h31
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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