Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2011, 11h29   #1
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 0
Points : 0
Par défaut problème sur une Fonction récursive

Bonjour

Voici ma table ( exemple) :

Voiture
Voiture Pneu 4
pneu Ecrou 3

Je voudrai avoir le resultat
Voiture ecrou 12

Voici ma requete réelle:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WITH tree(No_,comp,[Production BOM No_],level,Qty,qty2,[Version Code])AS (
 
SELECT     a.No_, b.No_ + b.[Version Code]  AS comp, b.[Production BOM No_],0,b."Quantity per",b.[Version Code]
FROM         TABLE$Item AS a  JOIN
                      [TABLE$Production BOM Line] AS  b ON 
                      a.[Production BOM No_] = b.[Production BOM No_]
WHERE     (a.No_= @article)  
 
UNION ALL 
 
 
SELECT     c.No_, d.No_+ d.[Version Code]  AS comp, d.[Production BOM No_]  ,t.level + 1,d."Quantity per",d.[Version Code]
FROM         TABLE$Item AS c  JOIN
                      [TABLE$Production BOM Line] AS d ON 
                      c.[Production BOM No_] = d.[Production BOM No_] 
INNER JOIN tree t ON t.comp=c.No_ )
 
 
SELECT @article,tree.* ,0 AS zero  FROM tree,TABLE$Item WHERE (comp NOT LIKE 'p_%') AND [Version Code]='' AND tree.comp =TABLE$Item.No_ ORDER BY tree.level
Je n'arrive pas à remonter la valeur d."Quantity per" dans l'autre requete.
Merci de votre aide.

bernie
bernie74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 13h43   #2
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Elle est bizzare votre requête.
Vous n'êtes pas fammilier avec les CTE, n'est-ce pas ?

La première partie de votre CTE est le point de départ.
Donc les quantités devraient y être 1 (le point de départ est 1 voiture, 1 pneu, etc...) et il n' y a donc pas besoin d'y faire de jointure avec votre "BOM".

La seconde partie de votre CTE "devrait" avoir comme première clause FROM : FROM [votre_cte].
En effet, votre point de départ y est "pour toutes les lignes de l'itération précédentes..." et il me semble que vous n'avez pas bien compris ça (ou alors vous aimez écrire l'envers à).
Dans votre itération vous deviez mutliplier (je ne vois aucun x) la quantité du "parent" avec la quantité de l' "enfant".
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 14h08   #3
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 0
Points : 0
Citation:
Envoyé par Sergejack Voir le message
Dans votre itération vous deviez mutliplier (je ne vois aucun x) la quantité du "parent" avec la quantité de l' "enfant".
C'est exactement ce que je n'arrive pas à faire.
Dans la 2eme requete comment s'appelle la quantité du parent ??

Concernant le reste, il est vraiment que je ne parle que d'une seule table dans mon exemple , mais qu'en reel j'en utilise 2 ( article et nomenclature).
De l'article ( parent) je vais chercher la nomenclature.
Et de la nomenclature je vais chercher les articles enfants.
Merci de vos reponses.

Bernie
bernie74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 19h58   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour
Citation:
Envoyé par bernie74 Voir le message
Dans la 2eme requete comment s'appelle la quantité du parent ??
La table parent est tree, mais vous lui donnez l'alias t.
cependant, dans votre CTE, vous définissez 7 colonnes, mais il n'y en a que 6 dans l'ancrage de votre CTE.
A première vue, il vous manque Qt2... justement la colonne que vous cherchez a récupérer dans la partie récursive.

Je pense qu'il vous faut utiliser la colonne quantité deux fois dans l'ancrage mais...

Citation:
Concernant le reste, il est vraiment que je ne parle que d'une seule table dans mon exemple , mais qu'en reel j'en utilise 2 ( article et nomenclature).
De l'article ( parent) je vais chercher la nomenclature.
Et de la nomenclature je vais chercher les articles enfants.
Merci de vos reponses.

Bernie
... Avec la structure de vos tables, ce serait plus simple...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 12h45   #5
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 0
Points : 0
Citation:
Envoyé par aieeeuuuuu Voir le message
Bonjour

La table parent est tree, mais vous lui donnez l'alias t.
C'est la reponse que je voulais.
merci

Code :
1
2
3
4
5
SELECT     c.No_, d.No_+ d.[Version Code]  AS comp, d.[Production BOM No_]  ,t.level + 1,d."Quantity per",t."Quantity per",d.[Version Code]
FROM         TABLE$Item AS c  JOIN
                      [TABLE$Production BOM Line] AS d ON 
                      c.[Production BOM No_] = d.[Production BOM No_] 
INNER JOIN tree t ON t.comp=c.No_ )
Je focalisais sur la 1ere partie de la requete, alors qu'il suffisait que rajouté t."Quantity per" dans la seconde partie.
Encore merci.
bernie74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h59.


 
 
 
 
Partenaires

Hébergement Web