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

WinDev Discussion :

Rubrique calculée avec CASE et plusieurs conditions vraies [WD17]


Sujet :

WinDev

  1. #1
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut Rubrique calculée avec CASE et plusieurs conditions vraies
    Bonjour,

    je suis sur un problème qui me semble anodin mais je ne parviens pas à trouver l'astuce pour me sortir de cette trappe!!

    J'ai une requête qui me liste essentiellement les rubriques de mon fichier. Dans cette requête, je veux y ajouter une rubrique calculée qui me donnera le nombre de NON que j'ai comme valeur pour 4 de mes rubriques listées.

    Pour ce faire, j'effectue dans l'editeur l'ajout de ce champ "rubrique calculée" ou je mets comme code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CASE WHEN VOITURES.OPTION_COULEUR = NON THEN 1 
    WHEN VOITURES.OPTION_CLIM = NON THEN CompteNbNon + 1 
    WHEN VOITURES.OPTION_EQUIPEMENT = NON THEN CompteNbNon + 1 
    WHEN VOITURES.OPTION_SPORTS = NON THEN CompteNbNon + 1 END
    Et je souhaiterais que mes conditions puissent etre "cumulables", cad que par exemple j'ai des cas ou :
    - VOITURES.OPTION_COULEUR = NON sera VRAI
    - VOITURES.OPTION_CLIM = NON sera vrai aussi
    - mon champ CompteNbNon devra donc etre égal a 2 et pas à 1!!
    Car j'ai l'impression que si la premiere condition est vrai, il sort! mais moi je veux qu'il continue!! Et qu'il fasse le tour de mes 4 champs et qu'il me disent sur les 4 combien il y a de NON!

    HELP, est ce qu'une solution existe?

    Merci pour vos lumières
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  2. #2
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    1ère remarque, si dans les options tu enregistre OUI/NON il te manque les simple quotte '

    2ème remarque tu te complique la vie...

    Fait une 1ère requête où tu transforme tes OUI/NON en 1/0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    CASE WHEN VOITURES.OPTION_COULEUR    = 'NON' THEN 1 ELSE 0 END AS Opt_voiture,
    CASE WHEN VOITURES.OPTION_CLIM       = 'NON' THEN 1 ELSE 0 END AS Opt_clim,
    CASE WHEN VOITURES.OPTION_EQUIPEMENT = 'NON' THEN 1 ELSE 0 END AS Opt_equipement,
    CASE WHEN VOITURES.OPTION_SPORTS     = 'NON' THEN 1 ELSE 0 END AS Opt_sport,
    ...
    puis une 2ème requête qui s'appuie sur le résultat de la 1ère requête et là tu n'a plus qu'à additionner tes NON
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    Opt_voiture + Opt_clim + Opt_equipement + Opt_sport AS Nb_non,
    ...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    j'allais te conseillé de faire l'inverse :

    si la somme des 4 rubriques = 0 alors toutes sont à NON !

    Ca évite les complications de transformations de données (Non en 1) et de ralentissements avec les CASE, ....

    De plus, dans ton code, tester = 0 ou = 4 ne doit pas changer grand chose !

    à bientôt,

    Nicolas

  4. #4
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    Merci laurent30s et Nicolas_Jeanneau pour vos éléments de réponse. J'ai combiné vos suggestions ainsi que ce que j'ai pu trouver ici : http://www.developpez.net/forums/d67...sedent-donnee/ et ça fonctionne!

    Voici le code de ma rubrique calculée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CASE WHEN VOITURES.OPTION_COULEUR = NON THEN 1 ELSE 0 END +
    CASE WHEN VOITURES.OPTION_CLIM = NON THEN 1 ELSE 0 END +
    CASE WHEN VOITURES.OPTION_EQUIPEMENT = NON THEN 1 ELSE 0 END +
    CASE WHEN VOITURES.OPTION_SPORTS = NON THEN 1 ELSE 0 END
    Merci encore
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  5. #5
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Autre manière de faire qui s'approche d'une ruse de Sioux...

    Principe :
    - Tu concatènes les 4 options, donc tu te retrouves avec une suite de OUINON... 4 en tout --> 1ère concaténation qui a une longueur 4 x 3 car = 12
    - Tu prends la même concaténation et tu remplaces les suites de caractères 'NON' par '' (abs de car) il reste une suite de OUI ou pas de caractère si que des NON --> 2ème concaténation
    - Il suffit de faire la différence entre la taille des 2 concaténations qu'on divise par 3 caractères (longueur du NON) pour obtenir le nombre de NON... Alleluia !

    Ce qui donne en SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    (LENGTH(CONCAT(VOITURES.OPTION_COULEUR,VOITURES.OPTION_CLIM,VOITURES.OPTION_EQUIPEMENT,VOITURES.OPTION_SPORTS)) -
     LENGTH(REPLACE(CONCAT(VOITURES.OPTION_COULEUR,VOITURES.OPTION_CLIM,VOITURES.OPTION_EQUIPEMENT,VOITURES.OPTION_SPORTS),'NON',''))) / 3 AS Nb_NON,
    ...
    en espérant ne pas m'être planté dans les parenthèses...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  6. #6
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    laurent30s
    Hier j'étais parti dans le raisonnement que tu m'expose ci dessus sauf que je me suis perdue en chemin et je n'ai pas abouti
    Je pense effectivement que c'est une autre solution à la problématique mais j’avoue que dans mon cas, c'est beaucoup plus simple avec les CASE
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

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

Discussions similaires

  1. INNER JOIN avec ON et plusieurs conditions de jointure
    Par olysmar2 dans le forum Développement
    Réponses: 1
    Dernier message: 24/06/2015, 07h47
  2. [XL-2010] Formule de calcul avec plusieurs conditions
    Par a.ouguerzam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/05/2015, 19h12
  3. Réponses: 22
    Dernier message: 22/05/2013, 17h52
  4. Calculs avec référence dans plusieurs colonnes
    Par sat478 dans le forum Excel
    Réponses: 1
    Dernier message: 24/11/2010, 17h35
  5. Réponses: 6
    Dernier message: 25/02/2008, 17h02

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