|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
bonjour,
j'ai un petit souci concernant le tri. en fait, je tri sur une colonne d'integer (positifs, négatifs ou nuls). quand je fais le tri normal (order by MaColonne) le tri marche parfaitement. par contre, quand j'ecris ca, cela ne marche plus (enfin ca marche sauf que j'ai les entiers négatifs toujours en extrémité et apparamment ils ne sont pas inclus dans le tri : Code :
Par ex, en l'occurrence pour l'exemple que je vous ai expliqué, pour sensTri=-1 et champTri = 'AVOIR', j'aurais le tri descendant sur la colonne AVOIR. Le pb est que pour des valeurs de la colonne AVOIRS comme suit: -10 -5 0 10 20 .. j'aurai un tri descendant de la forme -10 -5 20 10 0 je ne vois pas d'ou provient le souci du moment qu'un simple order by marche parfaitement, donc ce ne peut pas etre un problème de string et d'integer! j'ai essayé pour d'autres colonnes et ca marche très bien.. ya que les nombres négatifs qui foutent le b... Merci |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
pourquoi trier sur ROWNUM ? ROWNUM c'est forcément dans l'ordre croissant puisque c'est le numéro de la ligne
|
|
|
00
|
|
|
#3 | ||
|
Membre expérimenté
![]() ![]() Inscription : décembre 2005 Messages : 541 ![]() |
Et sous cette forme ...
Code :
|
||
|
|
00
|
|
|
#4 | ||||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
J'avais lu ça dans le journal d'Oracle : Le TYPE du DECODE est celui de la premiere valeur. Soit ici le type de champTri : VARCHAR2
Il va donc trier la chaine DECODE(:champTri, 'ID', ID, 'NUMERO', NUMERO, ID) comme du VARCHAR2. Chez moi par contre ça marche, j'ai les bons tris en faisant ta requete. Je te renvoies aussi sur la discussion des différences entre comparaison et tri. http://www.developpez.net/forums/sho...light=NLS_COMP Chez moi (9.2.0.1): Code :
Code :
|
||||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
bon je sais ce qui cloche..
c'est effectivement le decode!! en fait, :champtri est de type varchar2 (bien entendu car je fais le tri selon l'INTITULE de la colonne que je désire) le decode "croit" que toutes les colonnes que je lui envoie pour le tri sont de type varchar2. la solution serait de mettre les numéros de colonne au lieu des intitulés de colonnes, ce qui mettrait :champtri à integer et ca résout le pb, sauf que ce n'est pas du tout pratique car j'ai besoin de récupérer l'intitulé de la colonne et je ne vais pas imposer à l'utilisateur de connaitre tous les numéros de colonne!! voila.. je suis allé sur le lien que tu m'as envoyé et je n'ai pas trouvé de traces sur le pb du decode.. |
|
|
00
|
|
|
#6 | |||||||
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
Code :
Maintenant si je fais : Code :
[EDIT] Il est d'ailleurs intéressant de constater que cette conversion implicite faite par le decode n'est pas supportée par le case when : Code :
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|||||||
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
effectivement..
après qqes tests, je suis arrivé au même résultat! c'est donc le type de la première valeur renvoyée à Decode comme tu dis! mais ca me renvoie tjs au même problème. j'ai des colonnes de type différent (integer, varchar2 et date) je veux faire un tri selon l'intitulé de la colonne en utilisant un decode, ce qui me fait: Code :
orderby decode(:champtri, Somme, 'Somme', Nom, 'Nom', Date, 'Date', Nom) aucune solution ne marche pour tous ces types en même temps. Meme en reseignant le numero où champtri est de type integer--> ca résout le pb des nombres mais pas celui des dates.. est ce que qqn voit une solution?? ou même une suggestion.. merci |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Personnellement je fais autant de decode que j'ai de type de données :
Code :
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
||
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
et ça marche ton truc??
j'ai essayé chez moi et j'ai toujours les mêmes soucis... |
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
autant pour moi...
ca marche très bien Merci bp.. je pense que cela fera un bon post, surtout avec le sens de tri paramétrable que j'ai inclus au début.. encore merci |
|
|
00
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
Exact : Mea Culpa (mais j'avais lu ça il y a 3 ans, j'ai une excuse
)Mais bon, Freesstyler a écrit : Citation:
Quel est le desc des champs du decode ? |
|
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : septembre 2006 Messages : 339 ![]() |
c parce que j'ai essayé d'isoler le pb, alors qu'il ne s'agissait pas spécialement des integers, mais de n'importe quel autre type renseigné..
donc il faut finalement autant de decode que de types! Merci pour la discussion, c'était très instructif! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com