Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 07-01-2009 11:30:49

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Tri des valeurs NULL

Bonjour,

Petit problème concernant le tri des valeurs NULL. En effet celles-ci sont toujours placées au début que le tri soit ascendant ou descendant !!

Ce qui est bizarre c'est que ça fonctionne bien avec ASE iSQL mais pas dans mon appli...

Est-ce qu'il existe une option de configuration du driver pour dire comment traiter les NULL ?

Sinon je fais ça mais je dois retoucher toutes les requêtes !

Code: mssql

SELECT COALESCE(nom, ''), COALESCE(prenom, '') ...


PB 11.5 - ASE 12.5.4

Fab

Hors ligne

 

#2 07-01-2009 12:22:07

FMolinas  
Membre Geek
Lieu: Lyon
Date d'inscription: 12-06-2007
Messages: 87
Pépites: 97
Banque: 6,435,474,948,567

Re: Tri des valeurs NULL

It's not a bug, it's a feature

Sort method (DataWindows) a écrit:

When you sort a DataWindow on a specified column, rows with null data remain at the top, regardless of whether you choose ascending or descending order for your sort criteria.

Quant à ASE isql (je suis fan, c'est un très bon produit !), il substitue à posteriori les null par la chaîne que tu spécifies dans les options (page ResultSet).
Au final, je crains qu'il n'y ait pas de solution propre et élégante à ton problème...

Hors ligne

 

#3 07-01-2009 12:58:13

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: Tri des valeurs NULL

Merci, ouaip ben je la trouve pas cool du tout cette feature

A part COALESCE voyez-vous une autre solution ?

Fab

Hors ligne

 

#4 07-01-2009 14:31:34

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: Tri des valeurs NULL

J'ai un problème avec la solution COALESCE. En effet comment convertir un nombre NULL en texte.

Disons que j'ai une colonne qui contient des nombres dont certains sont NULL, mais je veux afficher une chaîne vide à la place (afin qu'elle soit correctement triée)

Code: sql

SELECT COALESCE(nom, '') ...


Fonctionne car nom est VARCHAR, mais:

Code: sql

SELECT COALESCE(age, '') ...


Ne fonctionne pas car age est un nombre mais '' pas !

Et bien entendu je ne veux pas faire:

Code: sql

SELECT COALESCE(age, -1) ...




Si vous avez des pistes je suis preneur...

Fab

Hors ligne

 

#5 07-01-2009 14:41:49

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: Tri des valeurs NULL

En Oracle, il y a la fonction NVL, mais je ne crois pas que l'équivalent existe en ASE


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#6 07-01-2009 14:57:52

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: Tri des valeurs NULL

Non elle n'existe pas mais il y a ISNULL qui fait pareil, mais en fait ça fait pareil: Implicit convertion from datatype VARCHAR to INT is not allowed...

Hors ligne

 

#7 07-01-2009 16:06:29

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Tri des valeurs NULL

Bonjour,

Je suppose que dans le SELECT COALESCE(age, -1) c'est la présence à l'affichage du -1 qui te gêne.

Tu peux toujours utiliser une colonne pour l'affichage et utiliser une autre colonne que tu n'affiches pas pour le tri :

Code: sql

SELECT age as display, COALESCE(age, -1) as tri


Sinon, tu peux également mettre une formule sur la colonne sur la propriété visible pour ne pas afficher le contenu lorsque la valeur est -1.

Autre suggestion, tu peux également faire le tri sur une colonne masquée de type computed field : if(IsNull(age), -1, age) et afficher la colonne age sans modification.

Hors ligne

 

#8 08-01-2009 13:02:20

FMolinas  
Membre Geek
Lieu: Lyon
Date d'inscription: 12-06-2007
Messages: 87
Pépites: 97
Banque: 6,435,474,948,567

Re: Tri des valeurs NULL

thefab a écrit:

J'ai un problème avec la solution COALESCE. En effet comment convertir un nombre NULL en texte.

Si tu cherches à renseigner une même colonne de ton jeu de résultat avec des valeur de type varchar ou int selon l'humeur, tu peux oublier de suite, c'est impossible : SQL est un langage à typage fort. À la rigueur, tu peux tenter un truc du genre :

Code: sql

SELECT isnull(convert(varchar, age), '') AS age_string

Mais ce n'est pas bien propre, et tu perds toute possibilité de tri naturel en fonction de la valeur numérique.

La meilleure piste me semble le computed field additionnel façon buck. Ton SQL reste propre, et avec un peu de chance tu auras peu de modifications à faire dans les scripts PB. Si tu t'autorises un tri multicritères, un computed field avec l'expression "if(isnull(age), 1, 0)" te permettra de placer à volonté les âges null en début ou en fin de liste.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22