2010-08-11 21 views
3

J'ai un tableau de profil utilisateur avec les colonnes User Name, Manager et de nombreux autres champs, par exemple, Amount.SQL Union/Join requête

Exemple Records:

User Manager Amount 
A  B  100 
x  y  200 
B  C  300 
M  N  800 
C  D  500 
P  Q  1000 
D  E  1000 

Je suis en train d'obtenir le résultat comme suit:

User Manager Amount 
A  B  100 
B  C  300 
C  D  500 
D  E  1000 

Fondamentalement, je veux juste montrer les résultats en cascade manière à ce que toutes les lignes sont extraites jusqu'à ce qu'il trouve tous les gestionnaires dans la hiérarchie pour un utilisateur. Quelqu'un peut-il aider?

============

Mise à jour

J'ai réussi à résoudre le problème en utilisant la requête suivante:

WITH rec(c1, c2) 
AS (SELECT c1, c2 FROM table WHERE c2 = 'A' 
UNION ALL 
SELECT table.c1, table.c2 FROM table, rec WHERE table.c2 = rec.c2) 
SELECT c1, c2 FROM rec 

Merci pour l'aide. Abhi.

+0

Pourriez-vous si un utilisateur peut avoir plusieurs gestionnaires, et si un gestionnaire peut avoir plusieurs utilisateurs, et ce dont vous auriez besoin dans ces instances? Ou limitez-vous toujours votre requête à un utilisateur comme point de départ? – Tobiasopdenbrouw

+0

Un utilisateur ne peut avoir qu'un seul gestionnaire, mais un gestionnaire peut gérer plusieurs utilisateurs. Mon point de départ sera l'utilisateur A et je souhaite lister tous les gestionnaires de la hiérarchie. –

+0

@Abhi: Veuillez ajouter votre solution en guise de réponse afin que les autres puissent la trouver plus facilement à l'avenir. Merci. – sarnold

Répondre

1

Il n'y a pas de SQL "standard" pour cela, mais la plupart des bases de données étendent SQL pour avoir ces options.

Dans Oracle, vous pouvez faire quelque chose comme:

SELECT USER, Manager, Amount FROM employees CONNECT BY PRIOR USER = Manager; 

s'il vous plaît voir quelques exemples: http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/ des exemples db2

+0

Hi Guy, La clause Connect By ne fonctionne pas dans DB2/400, mais vous m'avez montré le chemin. Je vais essayer de trouver s'il existe une alternative à la clause Connect By dans DB2/400. Merci. –