[SQL]Classer résultats requête suivant une liaison réflexive.

Classer résultats requête suivant une liaison réflexive. [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 24-06-2004 à 17:34:09    

J'explique le pourquoi de cette question étrange:
 
J'ai une table Dossier_Tbl qui contient:
ID_Dossier
ID_Dossier_précédent
...
 
Je souhaite récupèrer dans une requête mes dossiers dans l'ordre anti-chronologique de réalisation, mais les ID ne sont pas forcément dans l'ordre...
 
Il m'est facile de récupèrer le dernier en sélectionnant le dossier qui n'est jamais cité comme précédent et pour ceux qui précèdent je pensai écrire un truc dans ce genre là:
 
Nom-Requête :
 

Code :
  1. Select
  2. Auto-Incrément, ID_Dossier, ID_Dossier précédent ...
  3. From Dossier_Tbl
  4. Where ID_Dossier=("Select ID_Dossier_précédent From Nom-Requête Where Auto-Incrément" & Auto-Incrément & "-1" );


 
Mais là dedans je ne connai pas la synthaxe de l’auto-incrément…
Et si elle existe je ne sais pas si il est possible que la requête s’appelle elle même…D’ailleurs ca pose déjà un problène pour la première ligne qui ne peut pas faire référence à une précédente !!!
 
Vous avez une idée svp???
 
Puis si rien de tout ca est possible, je suis preneur de toute autre méthode pour classer mes dossiers…
 
 
Merci...d'avance :hello:


Message édité par strawfield le 24-06-2004 à 17:38:42
Reply

Marsh Posté le 24-06-2004 à 17:34:09   

Reply

Marsh Posté le 24-06-2004 à 17:51:36    

CONNECT BY ... PRIOR ...
 
Seul Oracle supporte cette fonction.
 
Il n'y a aucun autre moyen pour faire ça avec aucun autre SGBD.
 
A la limite tu peux te faire une procédure stockée de ouf, mais tu seras limité à un moment ou à un autre.


Message édité par Arjuna le 24-06-2004 à 17:51:43
Reply

Marsh Posté le 24-06-2004 à 19:24:15    

Arjuna a écrit :

CONNECT BY ... PRIOR ...
 
Seul Oracle supporte cette fonction.
 
Il n'y a aucun autre moyen pour faire ça avec aucun autre SGBD.
 
A la limite tu peux te faire une procédure stockée de ouf, mais tu seras limité à un moment ou à un autre.


 
AÏE!!!!!  :cry:  
 
Bon, ben j'ai une solution de  [:adsl1978] :
Vu que je veut les 5 derniers, je  vais faire 5 requêtes qui fonctionnent en "Cascade"...puis un formulaire qui les présentes en tableau pour faire comme si il n'y en vait qu'une...
 
 
A moins qu'un fana du sql passe par là entre temps...
 
 
Merci du tuyau...
 
 :hello:

Reply

Marsh Posté le 24-06-2004 à 23:49:17    

ben tu peux faire 5 jointures sur la meme table...
 
select lvl1.id, lvl2.id, lvl3.id, lvl4.id, lvl5.id
from latable lvl1, latable lvl2n latable lvl3, latable lvl4, latable lvl5
where lvl1.id = 1 and lvl2.pere = lvl1.id and lvl3.pere = lvl2.id and lvl4.pere = lvl3.id and lvl5.pere = lvl4.id

Reply

Marsh Posté le 25-06-2004 à 12:01:39    

Arjuna a écrit :

ben tu peux faire 5 jointures sur la meme table...
 
select lvl1.id, lvl2.id, lvl3.id, lvl4.id, lvl5.id
from latable lvl1, latable lvl2n latable lvl3, latable lvl4, latable lvl5
where lvl1.id = 1 and lvl2.pere = lvl1.id and lvl3.pere = lvl2.id and lvl4.pere = lvl3.id and lvl5.pere = lvl4.id


 
Excelente idée!!!!
 
J'ai écrit ca:
 

Code :
  1. SELECT
  2. D1.[N° Dossier], D1.[Dossier Précédent], ...
  3. D2.[N° Dossier], D2.[Dossier Précédent], ...
  4. D3.[N° Dossier], D3.[Dossier Précédent], ...
  5. D4.[N° Dossier], D4.[Dossier Précédent], ...
  6. D5.[N° Dossier], D5.[Dossier Précédent], ...
  7. FROM Dossier AS D1, Dossier AS D2, Dossier AS D3, Dossier AS D4, Dossier AS D5
  8. WHERE
  9. ((D1.[N° dossier]) Not In (Select [Dossier précédent] FROM Dossier))
  10. AND
  11. D2.[N° Dossier]=D1.[Dossier précédent]
  12. AND
  13. D3.[N° Dossier]=D2.[Dossier précédent]
  14. AND
  15. D4.[N° Dossier]=D3.[Dossier précédent]
  16. AND
  17. D5.[N° Dossier]=D3.[Dossier précédent];


 
Ca marche sans souci...ca me met tout sur la même ligne de la reqête mais je m'en accomoderai au niveau de l'interface...
 
 
Merci beaucoup!!!
 
 :hello:  :hello:


Message édité par strawfield le 25-06-2004 à 14:39:15
Reply

Marsh Posté le 25-06-2004 à 14:03:54    

Euh, y'a un problème avec tes jointures je pense... D'un côté il y a le numéro du dossier, et de l'autre celui du père logiquement. La tu retournes 5 fois le même ;)

Reply

Marsh Posté le 25-06-2004 à 14:39:58    

Arjuna a écrit :

Euh, y'a un problème avec tes jointures je pense... D'un côté il y a le numéro du dossier, et de l'autre celui du père logiquement. La tu retournes 5 fois le même ;)


 
Je venais de m'en rendre compte...Merci!!!
 
J'ai édité le code...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed