Condition

Bonjour,
Je cale sur un code , je veux choisir un des 2 champs dans une table.
J'ai dans from and( PAAPRIORITY=1 or PAADEFAULT=1) et je veux que si le champ PAAPRIORITY n'existe pas alors on prend PAADEFAULT, mais quand j’écris

and ( PAAPRIORITY=1 or PAADEFAULT=1), j'ai les 2.

J'ai PAADEFAULT dans select.

Bon je découvre pas à pas le code que m'a fait un informaticien ...

Je vous remercie pour votre aide et explication.

Merci

Pascal

15 réponses

Résumé de la discussion

Le fil traite d'une demande SQL consistant à sélectionner soit PAAPRIORITY soit PAADEFAULT pour un même produit, en privilégiant PAAPRIORITY lorsque ce champ existe et PAADEFAULT sinon. Plusieurs échanges recommandent d'utiliser COALESCE(PAAPRIORITY, PAADEFAULT) (ou ISNULL sur SQL Server) pour créer une colonne Cond_def qui retourne PAAPRIORITY quand présent et PAADEFAULT sinon, plutôt que d'écrire une condition WHERE ambiguë. D'autres interventions suggèrent d'exclure les tests dans la clause WHERE et d'intégrer le calcul directement dans la liste de sélection, afin d'obtenir une ligne Cond_def unique par produit et emballage. À noter que COALESCE est une fonction SQL standard et gère plusieurs arguments, alors que ISNULL est spécifique à certains SGBD comme SQL Server, ce qui peut influencer la portabilité du code.

Bobot (l’IA à votre service)
  1. Bonjour à tous,

    Et bien je ne trouve pas ma solution, j'ai fait x essai de code et pas moyen de trouver le bon.

    Sos si quelqu'un a une solution pour moi.

    Merci.

    Pascal
    0
    1. Tu n'as pas dû voir ma réponse :

      Bonjour,

      ISNULL est la fonction que tu recherches, je t'assure :)
      Si tu as un message d'erreur, c'est peut-être que les deux colonnes n'ont pas le même type.
      Je peux t'aider si tu me donnes :
      - Le message d'erreur exact ;
      - La valeur que prend la colonne PAAPRIORITY quand elle n'a pas de valeur (NULL ? Chaine vide ? 0 ?)
      - Le type de ces deux colonnes.

      Xavier
      0
    2. @Reivax962Bonjour XAVIER,

      Ok je comprends mieux, j'ai regardé et effectivement paapriority=1 et paadefault = null, mais si j'ai bien compris ce que tu me donnes comme code :
      ISNULL(paapriority, paadefault) as Cond_def, je le mets dans select, mais je mets quoi en from pour avoir le résultat de l'un ou l'autre.

      Merci pour ton aide.

      Bonne soirée
      0
    3. Bonjour,

      Tu n'as rien besoin de rajouter dans FROM.
      Sauf si les données que tu veux afficher sont issues d'une autre table.

      Xavier
      0
    4. Bonjour Xavier,

      j'ai mis ISNULL(paapriority, paadefault) as Cond_def dans select et le message d'erreur est le suivant

      [XTG SYSTEMS][INTERBASE6 OBC DRIVER],DYNAMIC SQL ERROR, SQLISNULL(paapriority, paadefault) as Cond_defRCODE =-804, FUNCTION UNKNOWN, ISNULL
      0
    5. ils proviennent bien de la même table
      0
  2. une précision ce code est dans Excel et les données proviennent d'un serveur via query.
    0
    1. Ha be j'ai fini par y arriver, bon maintenant je sais ce que est le code, merci HDU.
      0
      1. SELECT STOCOMMENT as Commentaire, 
        article.ARTNOARTICLE as Code,
         article.ARTSORT as Genre,  case when artvariety<>'' then artspecies||' '||artvariety else artspecies end as Espece_Variete, 
        stocriteria1.pardesignation as Etat_lot,
         artcriteria1.pardesignation as Diam_pot,
         artpresentation.pardesignation as Litrage, 
        artcriteria3.pardesignation as Presentation,
        artcriteria2.pardesignation as Presentation, 
        unvdesignation as Taille,  
        artcriteria4.pardesignation as Diam_tete,
         artcriteria9.pardesignation as HT_total,
        DEPOT.PARDESIGNATION as Site,
        EMPLACEMENT.EMPDESIGNATION as Parcelle_lot,
        stocriteria2.pardesignation as Marquage,
         paaprivilegedpackage as Condition,
        packaging.pacdesignation as Condition, 
        paaquantity as Qte_cond,
        paaqtyprivilegedpackage as Nb_cond,
        paaquantity*paaqtyprivilegedpackage as Qte_Roll,
        paaqtyprivilegedpackage2 as Nb_plt_cam,
         paaqtyprivilegedpackage3 as Metrage_cam,
        paaquantity*paaqtyprivilegedpackage*paaqtyprivilegedpackage2*paaqtyprivilegedpackage3 as Qte_plt_cam,
         paadefault as Cond_def, 
        article.ARTCRITERIA19 as Code_tri, 
        artcriteria19.pardesignation as tri, 
        artcriteria8 as Initial_fourn,
        article.ARTPRICEREFMARGIN as Tarif_PR,
        trfcostvalue  as Tarif_Palmacea,
        
        artcriteria12.pardesignation as Notre_Selection,
        STOBEGINDATEAVAILABLE,
        ARTQTEN1,
        ARTQTEN,
        STOQTYRESERVORDER,
        Stostockphysique, 
        Stostockdispo 
        
        
        FROM article article
        left outer join PACKAGEARTICLE on paanoarticle=artnoarticle
        left outer join artcost on trfnoarticle=artnoarticle
        left outer join supplier on cusnocustomer=artmainsupplier
        left outer join artpresentation on artpresentation.parcodeparam=article.artpresentation
        left outer join unitevente on unvcode=artsize
        left outer join artfamily on artfamily.parcodeparam=article.artfamilycode
        left outer join artcriteria5 on artcriteria5.parcodeparam=article.artcriteria5
        left outer join artcriteria1 on artcriteria1.parcodeparam=article.artcriteria1
        left outer join artcriteria2 on artcriteria2.parcodeparam=article.artcriteria2
        left outer join artcriteria3 on artcriteria3.parcodeparam=article.artcriteria3
        left outer join artcriteria9 on artcriteria9.parcodeparam=article.artcriteria9
        left outer join artcriteria4 on artcriteria4.parcodeparam=article.artcriteria4
        left outer join artcriteria10 on artcriteria10.parcodeparam=article.artcriteria10
        left outer join artcriteria11 on artcriteria11.parcodeparam=article.artcriteria11
        left outer join artcriteria6 on artcriteria6.parcodeparam=article.artcriteria6
        left outer join artcriteria7 on artcriteria7.parcodeparam=article.artcriteria7
        left outer join artcriteria12 on artcriteria12.parcodeparam=article.artcriteria12
        left outer join artcriteria13 on artcriteria13.parcodeparam=article.artcriteria13
        left outer join artcriteria19 on artcriteria19.parcodeparam=article.artcriteria19
        left outer join artcriteria8 on artcriteria8.parcodeparam=article.artcriteria8
        Left outer join packaging on packaging.paccodepackaging=packagearticle.paaprivilegedpackage
        
        inner join LOTSTOCK on STONOARTICLE=ARTNOARTICLE
        Left outer join EMPLACEMENT on EMPLACEMENT. EMPCODE=STOLOCATEMPLACEMENT
        left outer join STOCRITERIA1 on STOCRITERIA1.parcodeparam=LOTSTOCK.STOCRITERIA1
        left outer join STOCRITERIA2 on STOCRITERIA2.parcodeparam=LOTSTOCK.STOCRITERIA2
        Left outer join DEPOT on DEPOT.PARCODEPARAM=LOTSTOCK.STODEPOT
        where artnoarticle<>'9995'
        and PAAPRIORITY=1
          
        and stooutofdate<>1
        and STODEPOT <>'ZZZ'
        and trfnocostident=3
        
        
        and ARTMAINSUPPLIER=20
        0
        1. Bonjour HDU,

          Wahou je viens de comprendre ce que tu voulais, désolé je ne ne comprenais pas comment fonctionner "le code" je viens de trouver l'explication et l'icone pour le faire.
          Je te mets le code en entier.
          SELECT STOCOMMENT as Commentaire, 
          article.ARTNOARTICLE as Code,
           article.ARTSORT as Genre,  case when artvariety<>'' then artspecies||' '||artvariety else artspecies end as Espece_Variete, 
          stocriteria1.pardesignation as Etat_lot,
           artcriteria1.pardesignation as Diam_pot,
           artpresentation.pardesignation as Litrage, 
          artcriteria3.pardesignation as Presentation,
          artcriteria2.pardesignation as Presentation, 
          unvdesignation as Taille,  
          artcriteria4.pardesignation as Diam_tete,
           artcriteria9.pardesignation as HT_total,
          DEPOT.PARDESIGNATION as Site,
          EMPLACEMENT.EMPDESIGNATION as Parcelle_lot,
          stocriteria2.pardesignation as Marquage,
           paaprivilegedpackage as Condition,
          packaging.pacdesignation as Condition, 
          paaquantity as Qte_cond,
          paaqtyprivilegedpackage as Nb_cond,
          paaquantity*paaqtyprivilegedpackage as Qte_Roll,
          paaqtyprivilegedpackage2 as Nb_plt_cam,
           paaqtyprivilegedpackage3 as Metrage_cam,
          paaquantity*paaqtyprivilegedpackage*paaqtyprivilegedpackage2*paaqtyprivilegedpackage3 as Qte_plt_cam,
           paadefault as Cond_def, 
          article.ARTCRITERIA19 as Code_tri, 
          artcriteria19.pardesignation as tri, 
          artcriteria8 as Initial_fourn,
          article.ARTPRICEREFMARGIN as Tarif_PR,
          trfcostvalue  as Tarif_Palmacea,
          
          artcriteria12.pardesignation as Notre_Selection,
          STOBEGINDATEAVAILABLE,
          ARTQTEN1,
          ARTQTEN,
          STOQTYRESERVORDER,
          Stostockphysique, 
          Stostockdispo 
          
          
          FROM article article
          left outer join PACKAGEARTICLE on paanoarticle=artnoarticle
          left outer join artcost on trfnoarticle=artnoarticle
          left outer join supplier on cusnocustomer=artmainsupplier
          left outer join artpresentation on artpresentation.parcodeparam=article.artpresentation
          left outer join unitevente on unvcode=artsize
          left outer join artfamily on artfamily.parcodeparam=article.artfamilycode
          left outer join artcriteria5 on artcriteria5.parcodeparam=article.artcriteria5
          left outer join artcriteria1 on artcriteria1.parcodeparam=article.artcriteria1
          left outer join artcriteria2 on artcriteria2.parcodeparam=article.artcriteria2
          left outer join artcriteria3 on artcriteria3.parcodeparam=article.artcriteria3
          left outer join artcriteria9 on artcriteria9.parcodeparam=article.artcriteria9
          left outer join artcriteria4 on artcriteria4.parcodeparam=article.artcriteria4
          left outer join artcriteria10 on artcriteria10.parcodeparam=article.artcriteria10
          left outer join artcriteria11 on artcriteria11.parcodeparam=article.artcriteria11
          left outer join artcriteria6 on artcriteria6.parcodeparam=article.artcriteria6
          left outer join artcriteria7 on artcriteria7.parcodeparam=article.artcriteria7
          left outer join artcriteria12 on artcriteria12.parcodeparam=article.artcriteria12
          left outer join artcriteria13 on artcriteria13.parcodeparam=article.artcriteria13
          left outer join artcriteria19 on artcriteria19.parcodeparam=article.artcriteria19
          left outer join artcriteria8 on artcriteria8.parcodeparam=article.artcriteria8
          Left outer join packaging on packaging.paccodepackaging=packagearticle.paaprivilegedpackage
          
          inner join LOTSTOCK on STONOARTICLE=ARTNOARTICLE
          Left outer join EMPLACEMENT on EMPLACEMENT. EMPCODE=STOLOCATEMPLACEMENT
          left outer join STOCRITERIA1 on STOCRITERIA1.parcodeparam=LOTSTOCK.STOCRITERIA1
          left outer join STOCRITERIA2 on STOCRITERIA2.parcodeparam=LOTSTOCK.STOCRITERIA2
          Left outer join DEPOT on DEPOT.PARCODEPARAM=LOTSTOCK.STODEPOT
          where artnoarticle<>'9995'
          
          " j'ai essayé and et j'ai les 2 infos et where plante, Reivax962 m'a proposé isnull et il plante aussi                                           (PAAPRIORITY=1 or paadefault=1 ) 
            
          and stooutofdate<>1
          and STODEPOT <>'ZZZ'
          and trfnocostident=3
          
          
          and ARTMAINSUPPLIER=20
          0
          1. Tu ne veux vraiment pas mettre tout ton code sql ici, entre les balises '<code> ?
            0
            1. Bon j'ai essayé ISNULL(paapriority, paadefault) as Cond_def dans select et dans from, ca ne fonctionne pas, message d'erreur sur isnull.

              Bon je continue à chercher.

              Bonne soirée.

              Pascal
              0
              1. Bonjour,

                ISNULL est la fonction que tu recherches, je t'assure :)
                Si tu as un message d'erreur, c'est peut-être que les deux colonnes n'ont pas le même type.
                Je peux t'aider si tu me donnes :
                - Le message d'erreur exact ;
                - La valeur que prend la colonne PAAPRIORITY quand elle n'a pas de valeur (NULL ? Chaine vide ? 0 ?)
                - Le type de ces deux colonnes.

                Xavier
                0
            2. Bonjour Reivax962,

              Bon je m'explique mal, mais ta réponse va m'éclairer, j'ai dans une table 2 champs paapriority et paadefault, qui me renvoie chacun une info et j'ai besoin d'avoir comme retour d'info paapriority si il existe ou sinon paadefault qui existe toujours.

              Donc j'en ai déduit que je demandai cela dans from comme toutes mes demandes de résultat.

              Merci pour ton aide.

              Pascal
              0
              1. Bonjour,

                Ce que tu mets dans la clause WHERE va filtrer les résultats affichés, et non modifier les colonnes fournies.

                Si je comprends bien ta demande, ce que tu veux, c'est que la valeur Cond_def vale PAAPRIORITY si ça existe, ou PAADEFAULT sinon.

                Pour ça, enlève tes conditions dans le WHERE, elles sont inutiles ; et remplace
                paadefault as Cond_def

                par
                ISNULL(paapriority, paadefault) as Cond_def


                Xavier
                0
                1. Bonjour HDU,

                  Bon j'ai essayé de comprendre à quoi correspondait le code, mais je ne comprends pas comment je peux faire un lien sur mon fichier excel.

                  Je suis débutant dans ce domaine, j’écris du code par déduction de ce que m'a fait l'informaticien.

                  Bonne journée
                  0
                  1. Ce n'est pas ce que je te demandais, je te disais de coller ton code sql entre
                     <code> et 
                    </code>
                    0
                  2. @Utilisateur anonymede mettre "et" entre les 2 champs, c'est ca que tu veux dire, je sais je suis un boulet en informatique.
                    bonne soirée.

                    Pascal
                    0
                2. Ok,

                  mais en fait, je ne vois pas la limite entre la requête et le message d'erreur.

                  where artnoarticle<>'9995' 
                  
                  
                  and stooutofdate<>1 
                  and STODEPOT <>'ZZZ' 
                  and trfnocostident=3 
                  
                  
                  where (PAAPRIORITY=1 or paadefault=1 ) 
                  
                  message erreur XTX systems interbase6 ODBC Driver, Dynamic SQL Error code =- 104, token unknown line 74 column 1 where 
                  
                  and ARTMAINSUPPLIER=20 


                  Utilises la balise <code>, on y verra peut-être un peu + clair...

                  A+
                  0
                3. Le 2eme Where c'est moi qui l'ai ajouté et ca ne fonctionne pas, j'ai essayé avec and, mais la j'ai les 2 champs ?

                  Je ne trouve pas le bon code ?

                  Je continue à cogiter ...
                  0
                  1. Bonjour,

                    je ne connais pas Firebird, mais la fin de ta requête est étrange :

                    Left outer join DEPOT on DEPOT.PARCODEPARAM=LOTSTOCK.STODEPOT 
                    where artnoarticle<>'9995' 
                    
                    
                    and stooutofdate<>1 
                    and STODEPOT <>'ZZZ' 
                    and trfnocostident=3 
                    
                    
                    where (PAAPRIORITY=1 or paadefault=1 ) 
                    


                    il y a 2 where.

                    0
                    1. Bonjour HDU,

                      Je mets la requete complete, les données proviennent d'un programme developpé sous firebird.

                      Les champs proviennent de la meme table.

                      ci-joint la requete :

                      SELECT STOCOMMENT as Commentaire, 
                      article.ARTNOARTICLE as Code,
                       article.ARTSORT as Genre,  case when artvariety<>'' then artspecies||' '||artvariety else artspecies end as Espece_Variete, 
                      stocriteria1.pardesignation as Etat_lot,
                       artcriteria1.pardesignation as Diam_pot,
                       artpresentation.pardesignation as Litrage, 
                      artcriteria3.pardesignation as Presentation,
                      artcriteria2.pardesignation as Presentation, 
                      unvdesignation as Taille,  
                      artcriteria4.pardesignation as Diam_tete,
                       artcriteria9.pardesignation as HT_total,
                      DEPOT.PARDESIGNATION as Site,
                      EMPLACEMENT.EMPDESIGNATION as Parcelle_lot,
                      stocriteria2.pardesignation as Marquage,
                       paaprivilegedpackage as Condition,
                      packaging.pacdesignation as Condition, 
                      paaquantity as Qte_cond,
                      paaqtyprivilegedpackage as Nb_cond,
                      paaquantity*paaqtyprivilegedpackage as Qte_Roll,
                      paaqtyprivilegedpackage2 as Nb_plt_cam,
                       paaqtyprivilegedpackage3 as Metrage_cam,
                      paaquantity*paaqtyprivilegedpackage*paaqtyprivilegedpackage2*paaqtyprivilegedpackage3 as Qte_plt_cam,
                       paadefault as Cond_def, 
                      article.ARTCRITERIA19 as Code_tri, 
                      artcriteria19.pardesignation as tri, 
                      artcriteria8 as Initial_fourn,
                      article.ARTPRICEREFMARGIN as Tarif_PR,
                      trfcostvalue  as Tarif_Palmacea,
                      
                      artcriteria12.pardesignation as Notre_Selection,
                      STOBEGINDATEAVAILABLE,
                      ARTQTEN1,
                      ARTQTEN,
                      STOQTYRESERVORDER,
                      Stostockphysique, 
                      Stostockdispo
                      
                      FROM article article
                      left outer join PACKAGEARTICLE on paanoarticle=artnoarticle
                      left outer join artcost on trfnoarticle=artnoarticle
                      left outer join supplier on cusnocustomer=artmainsupplier
                      left outer join artpresentation on artpresentation.parcodeparam=article.artpresentation
                      left outer join unitevente on unvcode=artsize
                      left outer join artfamily on artfamily.parcodeparam=article.artfamilycode
                      left outer join artcriteria5 on artcriteria5.parcodeparam=article.artcriteria5
                      left outer join artcriteria1 on artcriteria1.parcodeparam=article.artcriteria1
                      left outer join artcriteria2 on artcriteria2.parcodeparam=article.artcriteria2
                      left outer join artcriteria3 on artcriteria3.parcodeparam=article.artcriteria3
                      left outer join artcriteria9 on artcriteria9.parcodeparam=article.artcriteria9
                      left outer join artcriteria4 on artcriteria4.parcodeparam=article.artcriteria4
                      left outer join artcriteria10 on artcriteria10.parcodeparam=article.artcriteria10
                      left outer join artcriteria11 on artcriteria11.parcodeparam=article.artcriteria11
                      left outer join artcriteria6 on artcriteria6.parcodeparam=article.artcriteria6
                      left outer join artcriteria7 on artcriteria7.parcodeparam=article.artcriteria7
                      left outer join artcriteria12 on artcriteria12.parcodeparam=article.artcriteria12
                      left outer join artcriteria13 on artcriteria13.parcodeparam=article.artcriteria13
                      left outer join artcriteria19 on artcriteria19.parcodeparam=article.artcriteria19
                      left outer join artcriteria8 on artcriteria8.parcodeparam=article.artcriteria8
                      Left outer join packaging on packaging.paccodepackaging=packagearticle.paaprivilegedpackage
                      
                      inner join LOTSTOCK on STONOARTICLE=ARTNOARTICLE
                      Left outer join EMPLACEMENT on EMPLACEMENT. EMPCODE=STOLOCATEMPLACEMENT
                      left outer join STOCRITERIA1 on STOCRITERIA1.parcodeparam=LOTSTOCK.STOCRITERIA1
                      left outer join STOCRITERIA2 on STOCRITERIA2.parcodeparam=LOTSTOCK.STOCRITERIA2
                      Left outer join DEPOT on DEPOT.PARCODEPARAM=LOTSTOCK.STODEPOT
                      where artnoarticle<>'9995'
                      
                        
                      and stooutofdate<>1
                      and STODEPOT <>'ZZZ'
                      and trfnocostident=3
                      
                      
                      where (PAAPRIORITY=1 or paadefault=1 )  
                      
                       message erreur XTX systems interbase6 ODBC Driver, Dynamic SQL Error code =- 104, token unknown line 74 column 1 where
                      
                      and ARTMAINSUPPLIER=20


                      Je vous remercie pour votre aide, je ne comprends pas encore la logique du code.

                      Bonne journée.

                      Pascal
                      0
                      1. Bonjour,

                        difficile de répondre car comprendre avec si peu d'éléments....

                        Mets donc ta requête complète.

                        A+
                        0