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

Développement SQL Server Discussion :

[2010] Boucle si condition dans une requête SQL


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 27
    Points : 18
    Points
    18
    Par défaut [2010] Boucle si condition dans une requête SQL
    Bonjour,

    Je fais d'habitude ce genre de chose directement dans le langage de programmation et non en SQL mais mes temps d'accès commencent à s'éterniser alors il est temps que je me penche sur la question.
    J'utilise les données d'un ERP qui comporte deux tables (enfin seulement deux m'intéressent ici ) : "ARTICLE" la mère et "NOMENC" la fille.

    Soit l'article est une matière première et alors la table NOMENC ne nous intéresse pas, soit c'est un produit fabriqué et alors la table NOMENC va lister les sous-articles que comporte l'article. Sachant que les sous articles eux-mêmes peuvent être de type produit fabriqué ... Enfin bref, vous l'aurez compris, c'est une architecture classique.

    Donc ma question c'est comment puis-je boucler sur l'élément et même les sous-élément en SQL si le champs père a la condition produit fabriqué en une seule requête ? La finalité étant de faire un arbre hiérarchique.

    Merci d'avance !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    si le nombre de niveau est fini est relativement faible (ie 3 voire 4 maxi), alors vous pouvez passer par des auto-jointures.
    sinon, vous pouvez passer par une requete récursive

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Bonjour,
    En effet le nombre de niveau est indéterminé donc je dois passer par de la récursivité. Je n'en ai jamais fait malheureusement et les premiers tests ne sont pas concluant. J'obtiens un résultat infini actuellement.
    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
    WITH tree (idArticle,idNomenc,nature,designation)
    AS
    (	SELECT RTRIM(A.ARKTCODART) AS idArticle, RTRIM(N.NOCTCODECP) AS idNomenc, N.NOCTNATCPT AS nature, RTRIM(N.NOCTLIBCOM) AS designation
    	FROM NOMENC AS N
    		INNER JOIN ARTICLE AS A
    			ON N.NOCTCODECP = A.ARKTCODART
    	WHERE N.NOKTSOC = '200' -- ID DE LA SOCIETE (ne pas y tenir compte)
    	AND N.NOKTCODPF = '62085' -- ID DE L'ARTICLE PRINCIPAL
     
    	UNION ALL
     
    	SELECT RTRIM(A.ARKTCODART) AS idArticle, RTRIM(N.NOCTCODECP) AS idNomenc, N.NOCTNATCPT AS nature, RTRIM(N.NOCTLIBCOM) AS designation
    	FROM NOMENC AS N
    		INNER JOIN ARTICLE AS A
    			ON N.NOCTCODECP = A.ARKTCODART
    		INNER JOIN tree AS T
    				ON T.idNomenc = N.NOCTCODECP
    )
    SELECT * FROM tree WHERE nature = '6' -- La nature '6' correspond à un produit fabriqué
    J'obtiens 33 tuples en 4 minutes ... Et je n'obtiens pas les matières premières de l'article vu que j'ai mis la condition à '6'. Enfin bref j'ai tout faux pour le moment.

Discussions similaires

  1. [AC-2010] mettre une condition sur une chaine de caractères dans une requête sql
    Par freeman3869 dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/06/2015, 11h45
  2. Réponses: 1
    Dernier message: 30/03/2012, 12h56
  3. Boucle dans une requête SQL
    Par od.dev dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/06/2010, 19h13
  4. [SQL] Conditions dans une requête SQL
    Par NeO666Linux dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/07/2007, 22h35
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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