Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/04/2007, 15h08   #1
Invité de passage
 
Inscription : avril 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 3
Points : 2
Points : 2
Par défaut Comment faire apparaitre les valeurs NULL en premier lors d'un SELECT

Je suis actuellement en train de travailler sur un projet Java avec base de donnée DB2.

La version de la base DB2 est v7.1 for os/390

DB2 attribut par defaut la valeur la plus haute à la valeur NULL ce qui me pose probleme pour mes requete SELECT.

Exemple
----------

SELECT * FROM Table ORDER BY Prenom

Nom Prenom
AAA aaaa
bbb bbbb
ccc gggg
tttt
ddd

Le blanc correspondant aux valeurs NULL.

Je souhaiterai juste que ces valeurs apparaissent en premier
Nom Prenom
tttt
ddd
AAA aaaa
bbb bbbb
ccc gggg


J'ai deja été voir sur des forumsainsi que regarder la doc technique d'IBM DB2 sur lesquels j'ai trouvé 2 "solutions":

1- Utilisation de ORDER BY Prenom [ASC] NULLS FIRST

SELECT * FROM Table ORDER BY Prenom ASC NULLS FIRST

Mais j'obtiens une erreur COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2] SQL0199N L'utilisation du mot réservé "NULLS" à la suite de "" est incorrecte. Parmi les marques attendues, on trouve : ", FOR WITH FETCH QUERYNO OPTIMIZE ". SQLSTATE=42601


2- Utilisation des fonctions OLAP

j'ai teste directement ce ki etait defini dans la documentation DB2 UDB V7.1 SQL CookBook

SELECT ID,YEARS AS YR,SALARY,DENSE_RANK() OVER(ORDER BY YEARS ASC NULLS FIRST) AS AF
FROM STAFF
WHERE ID < 100
ORDER BY YEARS,SALARY;

en creant la table

CREATE TABLE STAFF
(ID SMALLINT NOT NULL
,NAME VARCHAR (9)
,DEPT SMALLINT
,JOB CHARACTER (5)
,YEARS SMALLINT
,SALARY DECIMAL (7,2)
,COMM DECIMAL (7,2));

L'erreur obtenu : COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2] SQL0104N Une marque inattendue "(" figure à la suite de "". Parmi les marques attendues, on trouve : ", FROM INTO ". SQLSTATE=42601


Si quelqu'un à deja rencontré ce probleme et peut m'apporter une réponse sur comment utiliser ces fonctionnalité et si celles ci existe bien dans cette version de DB2 ( V7.1 os/390) car selon les sites les reponses ce sont pas les memes.

Merci
JAvaDb2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 23h41   #2
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 097
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 097
Points : 1 706
Points : 1 706
Les fonctions que vous citez n'existent pas en DB2 for z/OS.
Je pense qu'il vous faut passer soit par une fonction COALESCE soit par une expression CASE.
Voir aussi :
COALESCE
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 09h27   #3
Invité de passage
 
Inscription : avril 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 3
Points : 2
Points : 2
Merci de votre reponse cela confirme ce que je pensai.

J'ai en effet utilisé la fonction CASE et ca marche tres bien

SELECT Prenom,Nom
FROM( SELECT Prenom,Nom,
case when Prenom is null then 0 else 1 end as null_prenom
FROM Table) x
ORDER BY null_Prenom,Prenom,Nom


La fonction COALESCE ne remplace la valeur d'un null seulement aprés que le ORDER soit appliqué donc conserve l'odre par defaut des NULL.
JAvaDb2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h29.


 
 
 
 
Partenaires

Hébergement Web