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 :

Requête case / when ne retourne pas les résultats attendus


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Points : 63
    Points
    63
    Par défaut Requête case / when ne retourne pas les résultats attendus
    Bonjour,
    voici une requête case / when qui doit retourné un résultat différents dans la variable NEW_SIGNAL en fonction de la valeur du champ ART_STAT3. Dans mon exemple le résultat devrait être 'TEST' mais il renvoi NULL.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    declare @newsignaletique varchar(1000),@text_signaletique varchar(1000)
    declare @table table (Code_Art varchar(15),stat3 varchar(10))
    declare @table1 table (Code_Art1 varchar(15),new_Signaletique varchar(1000))
     
    insert into @table(Code_Art,stat3)
    (select art_code,art_stat3
    from ERP_PROD..ER2.GCARTICLE
    where art_rub4 ='0029');
     
    select *
    from @table;--Visu
     
     
    set @text_signaletique = 'TEST'
    set @newsignaletique = 
    (select top 1
     
    case
    when ART_STAT3 = 'SSAT' and @text_signaletique not like '%Conditionné%' then CONCAT(@text_signaletique,' .','Conditionné ',stat_libelle)
    when ART_STAT3 = 'SSVID' and @text_signaletique not like '%Conditionné%' then CONCAT(@text_signaletique,' .','Conditionné ',stat_libelle)
    when ART_STAT3 = 'SSAT' and @text_signaletique like '%Conditionné%' then @text_signaletique
    when ART_STAT3 = 'SSVID' and @text_signaletique like '%Conditionné%' then @text_signaletique
    else @text_signaletique
    end as NEW_SIGNAL
     
    from ERP_PROD..ER2.GCCODE_STAT,ERP_PROD..ER2.GCARTICLE,@table
    where GCCODE_STAT.STAT_CODE = GCARTICLE.ART_STAT3
    and  GCARTICLE.ART_CODE = Code_Art
    and GCCODE_STAT.STAT_TYPE = 'A' and GCCODE_STAT.STAT_NIVEAU = 3
    and GCARTICLE.ART_CODE in (select Code_Art from @table));
     
    select @newsignaletique NEW_SIGNAL;--Visu
     
    insert into @table1(Code_Art1,new_Signaletique)
    select Code_Art,@newsignaletique
    from @table;
     
    select *
    from @table1;--Visu
    Nom : Annotation 2020-03-10 124504.png
Affichages : 163
Taille : 8,4 Ko

    Qu'est-ce qui cloche dans ma requête ??
    Merci de votre aide

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    A priori, votre requête select top 1... ne renvoie aucune ligne. L'avez-vous testée séparément ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Points : 63
    Points
    63
    Par défaut
    Bonjour et merci de votre réponse.
    Effectivement elle renvoi un résultat null.

    En mettant "else @text_signal" je pensais gérer ce point...

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    ce serait le cas si la requete renvoyait une ligne, qui ne rentrerait dans aucun critére du CASE, mais comme la requete ne renvoie aucune ligne, aucune affectation n'a lieu.

    il faudrait faire par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    set @newsignaletique = COALESCE(
    (select top 1 ...
    )
    , @text_signaletique)

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

Discussions similaires

  1. Fonction Aggr qui ne renvoie pas les résultats attendus
    Par christelle_s dans le forum QlikView
    Réponses: 1
    Dernier message: 21/11/2013, 14h07
  2. recherche Fulltext ne retourne pas les bons résultats
    Par gmic7 dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/12/2011, 15h06
  3. [PDO] Une requête qui ne retourne pas de résultat
    Par beegees dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 25/11/2011, 18h18
  4. Réponses: 2
    Dernier message: 28/04/2011, 17h18
  5. Réponses: 1
    Dernier message: 28/09/2010, 12h34

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