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

Développement SQL Server Discussion :

Toujours au moins une ligne de résultat


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut Toujours au moins une ligne de résultat
    Bonjour

    J'ai une requête qui ne renvoie qu'un seul champ integer (avec valeur supérieur à 0).
    Selon les paramètre utilisé, je peux ne recevoir aucune ligne de résultat.
    Je voudrais, si la requête ne renvoie pas de ligne de résultat, obtenir une ligne avec la valeur 0 dans le champ.

    Dans une procédure stockée, j'utilise @@ROWCOUNT pour tester le nombre de lignes renvoyées.
    J'ai trouvé une solution pour faire ça directement dans la requête mais je me demandais s'il y a une autre astuce plus élégante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT T.num
    FROM   (SELECT TOP 1 num
            FROM   table1
            WHERE  num BETWEEN 161 AND 200 AND Dispo > 0
            UNION
            SELECT 0 num) T
    ORDER  BY T.num DESC

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 250
    Par défaut
    Tu peux peut-être essayer quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 1 COALESCE(num, 0)
            FROM   table1
            WHERE  num BETWEEN 161 AND 200 AND Dispo > 0

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Testé ... aucune ligne envoyée !
    En même temps, ça semble logique. La requête ne renvoie rien, et donc pas de valeur null utilisable dans le COALESCE

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    J'aime pas trop le "TOP 1" sans ORDER BY dans la sous-requête...

    Du coup SQL Server va renvoyer la première ligne trouvée, sans la moindre certitude de laquelle ce sera.

    Mettons que vous voulez le MAX(num), ou 0 s'il n'y a rien.

    Code code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select coalesce(max(num), 0)
    from table1 
    where num between 161 AND 200 
    AND Dispo > 0

    En effet, les fonctions d’agrégation ramènent toujours une ligne, même si aucun résultat ne correspond au filtre.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Excellent !

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

Discussions similaires

  1. Requête qui affiche une ligne de résultat en moins
    Par keusty78 dans le forum Langage
    Réponses: 4
    Dernier message: 19/05/2014, 17h56
  2. Obtenir une ligne de résultat dans tout les cas
    Par Apo94 dans le forum Développement
    Réponses: 5
    Dernier message: 02/02/2011, 12h06
  3. [MySQL] Recherche fonction donnant tableau d'une ligne du résultat d'une requête
    Par zakuli dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/02/2009, 18h56
  4. Réponses: 3
    Dernier message: 04/09/2008, 10h13
  5. Réponses: 4
    Dernier message: 31/10/2006, 16h47

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