Rebonjour,
J'avance dans ce que je veux faire, mais malgré j'ai encore besoin de votre aide et cela me désole, En fait j'ai la table ci-dessous qui synthétise le résultat d'une plus grosse requête SQL qui serait trop longue à expliquer.
Je précise que je travaille sous Oracle, on ne sait jamais
Je reprends le même exemple que l'autre post:
Voici le résultat d'une requête sur le nombre de personne travaillant pour une zone géographique d'une société, par Département, par Société 'sous-traitante', comme ci dessous.
Le département est codé en branche c'est à dire 132 = marketing et 133 c'est le département communication, le niveau au-dessus dans l'abre c'est le niveau 13 qui est "Service Supports".
La représentation se fait de la facon suivante:
Ma Table 'result':
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 1 | 13 | \ | \ 2 3
Ce que je souhaite faire dans une simple requête SQL c'est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 zone_geo,dpt, societe, nb_pers 'Paris', '132', 'Société 1', 3 'Paris', '132', 'Société 2', 1 ... 'Paris', '133', 'Société 1', 2 'Paris', '133', 'Société 2', 1 'Paris', '133', 'Société 3', 1 ...
1) Quand il y'a moins de 5 personnes le code représentant le département remonte d'un niveau
En gros dans le concept cela s'apparente à ceci:
Mais bien sûr cela ne marche pas, car cela reste du concept.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select zone_geo, case when sum(nb_pers)<5 then /*dpt tronché du dernier caractere, désolé je n'ai plus le bout de code trouvé en tête */ else dpt end, societe,nb_pers from table result group by zone_geo, case when sum(nb_pers)<5 then /*dpt tronché du dernier caractere*/ else dpt end, societe,nb_pers
Auriez-vous une début de piste là dessus?
Je ne suis même pas sur de pouvoir faire ce genre dans une requete SQL simple, peut être est-il plus simple de passer par du PL/SQL et de stocker cette table dans une table temporaire et ensuite faire des traitements dessus...
2) Faire cette requête de façon récursive ou plutôt répétée jusqu'à arriver au top niveau c'est à dire '1'
J'ai recherché au niveau de la fonction connect by mais je ne pense pas que cela corresponde au besoin.
A priori cela m'orienterait sur du PL/SQL que je ne maitrise pas vraiment, il faudrait que je m'y penche plus pour voir si c'est réalisable...
Merci à vous pour vos indices.
Partager