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

Langage SQL Discussion :

Retourner une valeur ou ligne si un enregistrement n'existe pas


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Septembre 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Septembre 2019
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Retourner une valeur ou ligne si un enregistrement n'existe pas
    Bonjour à tous

    Je fais appel aux bonnes âmes pour m'aider dans l'écriture d'une requête.
    Je fais face à 2 problématiques :

    1/ Je souhaite vérifier si les données d'une listes sont présentes dans les valeurs d'une table et retourner dans tous les cas une valeur par exemple 1 si vrai et 0 si faux (ou renvoyer la valeur recherchée si elle est présente et une ligne vide si valeur inconnue). Hors, malgré mes tentatives, je n'arrive qu'à renvoyer les valeurs vrais.
    Dans mon exemple, je cherche par exemple, si les 3 CODEINSEE sont dans ma table : 2 oui, 1 non => j'attends en retour 3 lignes 1,1,0 (ou les 2 codes insee OK et une ligne vide pour le code insee KO) ; avec code insee entre cotes = texte.

    J'ai essayé cela mais sans succès : cela renvoie uniquement les valeurs trouvées (2 sur 3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select case when CODEINSEE is not null
    Then 1 Else 0 
    End as CODE_INSEE
    From MATABLE
    Where CODEINSEE in (
    'XXXXXXXXXXXXX',
    'XXXXXXXXXXXXX',
    'XXXXXXXXXXXXX')
    Avec ce code, j'ai un message erreur sur EXISTS => mal placé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Select
    Case When Exists (Select CODEINSEE From MATABLE
    Where CODEINSEE in (
    'XXXXXXXXXXXXX',
    'XXXXXXXXXXXXX',
    'XXXXXXXXXXXXX'))
    Then 1
    Else 0
    End
    2/ Avec cette requête SQL, je souhaite l' embarquer dans du VBA pour l'automatiser. Autant je sais comment en VBA gérer/récupérer 1 donnée depuis un fichier excel dans une variable insérée dans le code SQL, autant je ne sais pas comment gérer X données (les codes insee) dont le nombre peut varier...


    Je vous remercie bien par avance de votre aide !
    A toute fin utile, je travaille avec winsql sur une bdd IBM DB2.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonsoir

    Un test d'existence se code avec (not) exists, il n'y a pas de clause FROM dans votre requête, oubli ou troncature ?
    Quoi qu'il en soit, cette requête fonctionne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    with tab1(t1id, t1insee) as
        (select 1, 'abcdefgh'   union all
         select 2, 'azerty'     union all
         select 3, 'plop'       union all
         select 4, 'bidule'     union all
         select 5, 'machin')
    select distinct case
         when exists 
             (select 1
              from tab1
              where t1insee in ('toto', 'tata', 'tutu', 'plop')
             )
             then 'ca existe'
             else 'y en a pas'
         end as keskecadit
    from tab1

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Septembre 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Septembre 2019
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Bonjour escartefigue

    Merci tout d'abord pour ta réponse !
    Et désolé de ne te répondre que maintenant mais j'étais en congés puis retour un peu chargé sur d'autres sujets au boulot.

    Concernant ta réponse, je n'ai pas je pense bien compris le fonctionnement de ta requête : je l'ai appliqué & adapté de la sorte mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With
    PERSPHY As (SELECT c1identifi, c1codinsee FROM persphy WHERE a.c1datdeces is null)
     
    select distinct 
    (case when exists 
       (select 1
        from PERSPHY where c1codinsee in ('1260793413001', '1290477239001'))
        then 1 
        else 0 end)
    from PERSPHY
    Je l'ai adapté car je veux vérifier l'existence d'un nombre de valeurs dans un fichier (=> c1codinsee in (...)) par rapport à toutes les valeurs de la table extraites (=> SELECT c1identifi, c1codinsee FROM persphy)

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    L'expression de besoin n'est pas claire : "je veux vérifier l'existence d'un nombre de valeurs dans un fichier"

    Si l'on veut vérifier la présence, que ce soit une fois, vingt fois, mille fois, peu importe, alors il faut utiliser EXISTS.
    Si l'on veut connaître le nombre de fois où certaines valeurs de colonnes sont présentes, il faut utiliser COUNT() avec GROUP BY.

    Pourquoi parle-t-on d'un fichier ? Le langage SQL ne sait travailler qu'avec des tables relationnelles, pas sur des fichiers.

    Et votre requête ne sélectionne qu'une seule colonne. Avec la clause distinct, vous n'obtiendrez que 0 ou 1, au plus une fois... ce qui n'est pas très parlant

    Un exemple de jeu de données en entrée et de résultat attendu serait plus parlant.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/06/2014, 14h58
  2. Retourner une valeur qui dépend de plusieurs lignes
    Par oli43 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/10/2008, 16h00
  3. Réponses: 6
    Dernier message: 19/02/2007, 13h34
  4. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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