IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Remplacer un résultat nul par une valeur


Sujet :

Requêtes PostgreSQL

  1. #1
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut Remplacer un résultat nul par une valeur
    Bonjour à tous,

    En fouillant dans mes connaissances SQL et dans les cours, je ne suis pas parvenu à trouver le moyen, s'il existe, de remplacer le résultat, éventuellement nul, par une valeur.

    P.e.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT toto FROM tata WHERE titi = 2
    "et si resultat est nul, tu retourne 3

    Le tout constituant une seule et même requête SQL.

    Merci de ne pas rire si cela n'existe pas...

  2. #2
    Membre averti Avatar de icsor
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2008
    Messages : 258
    Points : 436
    Points
    436
    Par défaut
    Bonjour,

    recherchez sur le net la syntaxe du case en sql, et vous trouverez une solution.

  3. #3
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Oui, j'y ai évidemment pensé en premier lieu.
    Je m'en suis déjà servis dans des procédures, mais il ne semble pas possible de l'intégrer dans une requête, en tout cas, PostgrSQL le prend pour une erreur de syntaxe.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par od.dev Voir le message
    trouver le moyen, s'il existe, de remplacer le résultat, éventuellement nul, par une valeur.

    P.e.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT toto FROM tata WHERE titi = 2
    "et si resultat est nul, tu retourne 3

    Le tout constituant une seule et même requête SQL.
    Avec ton exemple de requête, le résultat ne sera pas NULL. Ou bien il y aura une ou des lignes retournées, ou bien il n'y en aura aucune si aucune ne satisfait à la condition de restriction.

    il ne semble pas possible de l'intégrer dans une requête, en tout cas, PostgrSQL le prend pour une erreur de syntaxe.
    CASE par reconnu par Postgresql ? Ca métonnerait ! C'est du standard SQL et Postgresql est assez proche de la norme SQL.

    Poste ta requête et le message d'erreur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Oui, autant pour moi,
    j'ai dit une bêterie, il fallait comprendre "ne retourne aucun résultat".
    Pour ce qui est de case, l'éditeur SQL de pgAdmin retourne une erreur, ce qui ne m'étonne pas, puisque je pensais savoir que Case ne s'emploie que dans un bloc procédural.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Case ne s'emploie que dans un bloc procédural.
    Faux ! CASE s'utilise très bien dans une requête SQL.
    C'est une instruction du langage SQL normalisé donc ça doit être accepté par tout SGBD digne de ce nom.

    Alors bis repetita :
    Poste ta requête et le message d'erreur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    De manière générale, pour remplacer une valeur NULL par une autre valeur, vous pouvez utiliser coalesce plutot qu'utiliser CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coalesce(toto,3) AS valeur
    Et la syntaxe de CASE est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CASE WHEN toto is null THEN 3 ELSE toto END AS valeur
    Si votre problème est qu'aucune ligne n'est retournée, gérez ça plutôt du coté de l'appli, si nombre de ligne retournées = 0, alors 3.

  8. #8
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coalesce(toto,3) AS valeur
    Je savais bien qu'il y avait un truc comme cela
    Merci, c'est ce que je cherchais.

    Mais, malheureusement, cela ne résout pas mon problème.
    Je voudrais justement éviter de gérer le résultat d'une première requête dans l'appli, mais ce ne sera peut-être pas possible...
    En fait, ce SELECT est inclus dans un INSERT, ce qui explique que l'absence de résultat dans certains cas me pose problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CASE WHEN toto IS NULL THEN 3 ELSE toto END AS valeur
    Je ne connaissais pas le syntaxe, merci.

  9. #9
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COALESCE((SELECT toto FROM tata WHERE titi = 2), 3)
    Il me semble que dans PostGreSql ça devrait passer.
    Roland

  10. #10
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Désolé pour le temps de réponse rsc, mais j'étais passé à autre chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COALESCE((SELECT toto FROM tata WHERE titi = 2), 3)
    C'est exactement ce que je charchais rsc

    SQL est vraiment un métier à plein temps
    Encore un truc d'appris.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacement des champs vides par une valeur N/A
    Par dandy87 dans le forum SSIS
    Réponses: 2
    Dernier message: 18/04/2013, 09h58
  2. [VxiR2] Remplacer cellules vides par une valeur
    Par mouhib dans le forum Webi
    Réponses: 7
    Dernier message: 01/12/2010, 09h53
  3. [Toutes versions] Remplacer "#N/A" par une valeur par défaut
    Par canary dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/05/2009, 11h23
  4. [RegEx] Remplacement d'une chaine entre { } par une valeur
    Par phpiste dans le forum Langage
    Réponses: 13
    Dernier message: 08/02/2008, 22h35
  5. remplacer un "no rows selected" par une valeur
    Par awalter1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/09/2007, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo