Bonjour,

Voici mon problème :
- j'ai une table contenant des n° de clients.
- chaque client peut avoir de 0 à n filleul (mais un filleul ne peut avoir qu'un seul parrain)
- chaque client, qu'il soit parrain ou filleul, dispose d'un certain nombre de points-cadeaux.
- dans la table, le nombre de points-cadeaux d'un parrain comprend ses propres points, plus ceux de ses filleuls.

But :
Je cherche à récupérer, pour chaque client, le nombre de ses propres points-cadeaux.

Avec une logique humaine, c'est assez simple : on regarde quels sont les filleuls d'un parrain, on additionne les points de ces filleuls, et on soustrait le tout aux points du parrain.
Mais en Transac-SQL, c'est beaucoup plus chaud...
Si quelqu'un entrevoit une solution, je suis prenneur

Voici la structure de la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CREATE TABLE pointcadeau (
    id_client   int,
    id_parrain  int,
    nb_point    int
)
Pour les données, par exemple je peux avoir :
- le client 1 a 1000 points, et deux filleuls (clients 3 et 4)
- le client 2 a 400 points mais pas de filleul
- le client 3 (filleul du 1) a 300 points, et a lui-même un filleul (client 5)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
INSERT INTO pointcadeau VALUES ( 1, 1, 1000 )
INSERT INTO pointcadeau VALUES ( 2, 2,  400 )
INSERT INTO pointcadeau VALUES ( 3, 1,  300 )
INSERT INTO pointcadeau VALUES ( 4, 1,  100 )
INSERT INTO pointcadeau VALUES ( 5, 3,   50 )
Pour l'instant, un SELECT de ma table me donne ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
id_client id_parrain nb_point
--------- ---------- --------
        1          1     1000
        2          2      400
        3          1      300
        4          1      100
        5          3       50
Le résultat final que je voudrais obtenir est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
id_client nb_point_reel
--------- -------------
        1           600
        2           400
        3           250
        4           100
        5            50