2010-10-01 1 views
0

alt textrequête sql requis pour le scénario ci-dessous

Ici pour une partie Finum « CF061W » est 25, je vais choisir des documents dont la valeur est de 25 fparinum maintenant je vais obtenir ces pièces FA061W, HRD20600 et SD1201. Maintenant encore, je vais sélectionner les enregistrements dont la valeur fparinum est le nombre de pièces récupérées ci-dessus FA061W, HRD20600 et SD1201 et ainsi de suite. Cela devrait continuer jusqu'au plus haut niveau (flevel), pour le tableau ci-dessus, il est au niveau 4.

Maintenant, je veux une seule requête sql qui récupérera tous les enregistrements pour la partie parente 'CF061W'.

Merci à l'avance

Pradeep

+0

peut u s'il vous plaît donner à votre structure de la table? et la sortie que tu veux? vous devrez utiliser CTE récursif pour cette – Thakur

Répondre

1

ce wil travail pour vous

WITH TAB_CTE AS (
SELECT finum, part, fparinum, flevel 
FROM TABTEST 
WHERE PART='CF061W' 
UNION ALL 
SELECT e.finum, e.part, e.fparinum, e.flevel 
FROM TABTEST e 
INNER JOIN TAB_CTE ecte ON ecte.finum = e.fparinum 
) 
SELECT * 
FROM TAB_CTE 

SORTIE

finum  part   fparinum flevel 
25   CF061W   0   1 
26   FA061w   25   2 
27   hrd20600  25   2 
35   sd1201  25    2 
28   f1024   27   3 
1

je pourrais avoir la jointure des colonnes de l'état: INNER JOIN PartHierarchy ph ON n.finum = ph.fparinum dans le mauvais sens (pas familier avec votre schéma).

WITH PartHierarchy (finum, part, fparinum , dsono, flevel) AS 
(
    -- Base case 
    SELECT 
     finum, 
     part, 
     fparinum, 
     dsono, 
     1 as flevel 
    FROM myTablename 
    WHERE fparinum = 0 

    UNION ALL 

    -- Recursive step 
    SELECT 
     n.finum, 
     n.part, 
     n.fparinum, 
     n.dsono, 
     ph.flevel + 1 AS flevel 
    FROM myTablename n 
     INNER JOIN PartHierarchy ph ON n.finum = ph.fparinum 
) 

SELECT * 
FROM PartHierarchy 
ORDER BY flevel 

Ceci est un CTE récursive classique (Common Table Expression)