Condition sur 2 champs

Résolu
Bonjour,

Bonne année à tous et surtout la santé.

Je cherche à trier des champs dans une table, dans une table j'ai 2 champs qui gèrent l'emballage dans une fiche article, PAAPRIORITY=0 ou PAAPRIORITY=1 et PAADEFAULT =1 et je voudrais récupérer l'un ou l'autre par une condition c.a.d :

si PAAPRIORITY=1 on prend PAAPRIORITY=1 et si PAAPRIORITY=0 alors on prend PAADEFAULT =1

j'ai essayé avec ça dans select, mais je récupère les 2 champs

Case when PAAPRIORITY=0 then 1 else 0 end as FILTRAGE_Priorité

Bon j’espère que c'est clair mon explication.

Bonne soirée.

Pascal

3 réponses

Résumé de la discussion

Le choix entre PAAPRIORITY et PAADEFAULT se fait selon une règle simple: si PAAPRIORITY vaut 1, on retient PAAPRIORITY, sinon on utilise PAADEFAULT pour trier l'emballage dans la fiche article. Des échanges proposent d'obtenir une valeur unique via CASE ou IIF afin que seul un champ soit renvoyé, privilégiant PAAPRIORITY lorsque présent et PAADEFAULT en cas d'absence. D'autres évoquent COALESCE ou des variantes et expliquent que l'erreur survient lorsque la requête retourne deux colonnes au lieu d'une valeur unique dans le jeu de résultats. En pratique, une solution courante consiste à CASE WHEN PAAPRIORITY=1 THEN 1 ELSE PAADEFAULT END AS Filtrage_Priorité, ou bien IIF(PAAPRIORITY=1,1,PAADEFAULT) selon le système de gestion utilisé.

Bobot (l’IA à votre service)
  1. Contributeur Ambassadeur
    bonsoir,
    tu n'es pas du tout clair, peut-être avec quelques exemples?
    et ainsi?
    if(PAAPRIORITY=1,1,PAADEFAULT) 
    0
    1. Bonjour yg_be,

      Bonne année à toit et à toute ta famille et encore merci pour ton aide.

      j'ai mis le code , mais il y a une erreur sur if.

      Je vais essayer d’être plus clair, dans une fiche article j'ai la table emballage et j'ai 2 champs PAADEFAULT qui est toujours égal à 1 et j'ai PAAPRIORITY qui est égal à 1 si il existe, sinon il y a que PAADEFAULT=1.

      Donc j'essaie de récupérer PAAPRIORITY et si il n'existe pas, je récupére PAADEFAULT.

      ci-joint mon code :

      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,
      article.ARTCRITERIA19 as Code_tri,
      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,
      STOADJUSTQTY,
      STOQTYRESERVORDER,
      Stostockdispo,
      Stostockphysique,

      ARTQTEN1 as Qte_N1,
      ARTQTEN as Qte_N

      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'
      if(PAAPRIORITY=1,1,PAADEFAULT)
      and stooutofdate<>1
      and STODEPOT <>'ZZZ'
      and trfnocostident=3
      and ARTMAINSUPPLIER=6
      0
      1. Contributeur Ambassadeur
        j'avais compris que tu voulais récupérer l'un ou l'autre, donc il faut mettre le IF avant le FROM:
        SELECT STOCOMMENT as Commentaire, 
        if(PAAPRIORITY=1,1,PAADEFAULT) as AutreChose,
        ...

        bonne année à toi et aux tiens!
        0
      2. Oui je veux récupérer PAAPRIORITY si il existe et sinon je récupère PAADEFAULT
        0
      3. Contributeur Ambassadeur
        as-tu mis le IF avant le FROM?
        0
      4. oui mais j'ai un message d'erreur il ne veut pas de IF
        0
      5. Contributeur Ambassadeur
        @pascalou83400quel message d'erreur?
        et ceci donne quoi?
        SELECT IF(1>3,'true','false');
        0
    2. Contributeur Ambassadeur
      il est possible de récupérer l'un ou l'autre, nous sommes en train de tester pour obtenir une solution.
      j'essaie de comprendre pourquoi
      IIF(PAAPRIORITY=1,1,PAADEFAULT)
      ne te convient pas.
      pour comprendre cela, j'ai besoin de comprendre pour quelles combinaisons de valeur de PAAPRIORITY et de PAADEFAULT le résultat retourné par
      IIF(PAAPRIORITY=1,1,PAADEFAULT)
      ne te convient pas.
      et donc je te demande de me montrer des réponses à la requête suivante, et de m'expliquer pourquoi la valeur de IIF(PAAPRIORITY=1,1,PAADEFAULT) ne te convient pas.
      SELECT PAAPRIORITY, PAADEFAULT, IIF(PAAPRIORITY=1,1,PAADEFAULT) FROM ...
      0
      1. IIF(PAAPRIORITY=1,1,PAADEFAULT) et bien cela me renvoie pour le même article une ligne avec PAAPRIORITY=1 et une ligne avec PAADEFAULT=1
        donc j'ai 2 lignes avec les 2 emballages differents et moi je veux l'un ou l'autre c.a.d soit le PAAPRIORITY si il existe et sinon le PAADEFAULT, mais je veux qu'une seule ligne par article pas de doublon.
        je ne sais pas si c'est clair mon explication, pour info je ne mets rien dans from on est bien d'accord.
        0
      2. Contributeur Ambassadeur
        @pascalou83400merci de partager le texte du SELECT que tu utilises pour tester le IIF.
        0
      3. 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,
        article.ARTCRITERIA19 as Code_tri,
        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,
        STOADJUSTQTY,
        STOQTYRESERVORDER,
        Stostockdispo,
        Stostockphysique,

        ARTQTEN1 as Qte_N1,
        ARTQTEN as Qte_N,
        PAAPRIORITY,
        PAADEFAULT,
        IIF(PAAPRIORITY=1,1,PAADEFAULT)

        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

        and ARTMAINSUPPLIER=6
        0
      4. Contributeur Ambassadeur
        @pascalou83400merci de ne garder que garder que les trois derniers champs entre le SELECT et le FROM.
        ce SELECT doit donc te donner TROIS éléments pour chaque enregistrement.
        peux-tu me donner les trois valeurs?
        0
      5. la valeur c'est que des 1
        0