Condition sur 2 champs

Résolu
pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention   -  
pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention   -
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é.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir,
    tu n'es pas du tout clair, peut-être avec quelques exemples?
    et ainsi?
    if(PAAPRIORITY=1,1,PAADEFAULT) 
    0
  2. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      Oui je veux récupérer PAAPRIORITY si il existe et sinon je récupère PAADEFAULT
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      as-tu mis le IF avant le FROM?
      0
    4. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      oui mais j'ai un message d'erreur il ne veut pas de IF
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      quel message d'erreur?
      et ceci donne quoi?
      SELECT IF(1>3,'true','false');
      0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      merci de partager le texte du SELECT que tu utilises pour tester le IIF.
      0
    3. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      merci 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. pascalou83400 Messages postés 285 Date d'inscription   Statut Membre Dernière intervention  
       
      la valeur c'est que des 1
      0