Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Simplification de requête (bis)

14 réponses
Avatar
Hervé DUCARNE
Bonjour,

J'ai encore un problème pour la construction d'une requête...

J'ai une table "donnees" qui contient tout un tas de champs, la plupart sont
des booléens.

Il y a t'il moyen de construire 1 requête sql qui me donnerait le résultat
suivant :

nbre total d'enregistrements avec champ1 à vrai / (nbre total
d'enregistrements avec champ2 à vrai OU nbre total d'enregistrements avec
champs3 à vrai).

Merci d'avance.

4 réponses

1 2
Avatar
Eric
re,

Exact mais ce n'était pas stipulé dans la formulation ;-)
Bon, là il faut cogiter un peu plus. Pas sur de pouvoir te donner la
réponse(si je la trouve) avant ce soir car je vais devoir partir d'ici
30 min.

Bonjour Eric,

Tu as bonne mémoire ;-))

Par contre dans ta requête, il va me comtper 2 fois un enregistrement qui a
vrai à 2 et vrai à 3, non ?
Si c'est le cas ça n'ira pas, mes calculs seront faussés...


"Eric" a écrit dans le message de
news:

Bonjour,

Peut-être, un truc du genre:
SELECT Sum(-[1]) /(SELECT Sum(-[2]-[3]) FROM LaTable)
FROM LaTable
ou
SELECT Sum(-[1]) /(SELECT ABS(Sum([2]+[3])) FROM LaTable)
FROM LaTable;

J'ai souvenir que tes champs étaient nommés [1],[2], ... , [100] donc
j'ai poursuivi dans ce sens ;-)




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
Eric
on poursuit ...

Et ça :
SELECT Sum(-[1]) /(SELECT ABS(Sum([2]+[3])) FROM LaTable where [2]úlse
Or [3]úlse)
FROM LaTable ;

ou encore :
SELECT Sum(-[1]) /(SELECT ABS(Sum([2]+[3])) FROM LaTable where [2]úlse
Or [3]úlse)
FROM LaTable
WHERE [2]= False or [3]= False;
dans cette derniere, on ne compte que les [1] à VRAI n'ayant pas [2] ET
[3] à Vrai

C'est bon ?

Bonjour Eric,

Tu as bonne mémoire ;-))

Par contre dans ta requête, il va me comtper 2 fois un enregistrement qui a
vrai à 2 et vrai à 3, non ?
Si c'est le cas ça n'ira pas, mes calculs seront faussés...




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Hervé DUCARNE
Re,

j'ai testé mais ça ne marche pas :-(

En fait, il faudrait bien que la requête compte les enregistrements dans le
cas où soit 2 est vrai, soit 3, soit 4, soit deux d'entre eux, soit tous les
trois, mais qu'il ne me le compte qu'une fois... (pas certain d'être
clair...).
Un exemple :
[2] [3] [4]
-1 0 -1 --> on compte 1 fois
0 0 -1 --> "
-1 -1 -1 --> "
0 0 0 --> on ne compte pas

Alors que toi dans les requêtes que tu m'as données, j'ai l'impression que
soit on compte autant de fois qu'il y a de vrai, soit il faut qu'il y ait
uniquement 1 seul champ à vrai, et aucun autre.

Bon, je vais faire 2 requêtes, et essayer de bidouiller le tout, car je
m'étais arrêté sur 2/3 champs, mais en fait, je pourrais peut-être avoir un
truc du genre : champ1 et champ10 vrais / champ2 vrai et/ou champ3 vrai
et/ou champ4 vrai et/ou champ5 vrai

Et là ça va vite être la m...e !

Merci quand même et désolé pour le dérangement !

@+


"Eric" a écrit dans le message de
news:
on poursuit ...

Et ça :
SELECT Sum(-[1]) /(SELECT ABS(Sum([2]+[3])) FROM LaTable where [2]úlse
Or [3]úlse)
FROM LaTable ;

ou encore :
SELECT Sum(-[1]) /(SELECT ABS(Sum([2]+[3])) FROM LaTable where [2]úlse
Or [3]úlse)
FROM LaTable
WHERE [2]= False or [3]= False;
dans cette derniere, on ne compte que les [1] à VRAI n'ayant pas [2] ET
[3] à Vrai

C'est bon ?

Bonjour Eric,

Tu as bonne mémoire ;-))

Par contre dans ta requête, il va me comtper 2 fois un enregistrement
qui a


vrai à 2 et vrai à 3, non ?
Si c'est le cas ça n'ira pas, mes calculs seront faussés...




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Hervé DUCARNE
Euréka !

Grâce à vos aides, j'ai transformé les requêtes en ça, et cela va à
merveille :
select sum([90])*(-100)/
(SELECT Count(ci_donnees) AS expr1
FROM donnees
WHERE [90]=1 OR [94]=1 OR donnees.[95]=1 OR donnees.[96]=1) as expr2 from
donnees;

Le *(-100) pour avoir un pourcentage, et ça m'évite de passer par ABS()


Merci encore, et ouf...... :-)))))))))))))))

"Hervé DUCARNE" a écrit dans le message de
news:
Re,

j'ai testé mais ça ne marche pas :-(

En fait, il faudrait bien que la requête compte les enregistrements dans
le

cas où soit 2 est vrai, soit 3, soit 4, soit deux d'entre eux, soit tous
les

trois, mais qu'il ne me le compte qu'une fois... (pas certain d'être
clair...).
Un exemple :
[2] [3] [4]
-1 0 -1 --> on compte 1 fois
0 0 -1 --> "
-1 -1 -1 --> "
0 0 0 --> on ne compte pas

Alors que toi dans les requêtes que tu m'as données, j'ai l'impression que
soit on compte autant de fois qu'il y a de vrai, soit il faut qu'il y ait
uniquement 1 seul champ à vrai, et aucun autre.

Bon, je vais faire 2 requêtes, et essayer de bidouiller le tout, car je
m'étais arrêté sur 2/3 champs, mais en fait, je pourrais peut-être avoir
un

truc du genre : champ1 et champ10 vrais / champ2 vrai et/ou champ3 vrai
et/ou champ4 vrai et/ou champ5 vrai

Et là ça va vite être la m...e !

Merci quand même et désolé pour le dérangement !

@+


"Eric" a écrit dans le message de
news:
on poursuit ...

Et ça :
SELECT Sum(-[1]) /(SELECT ABS(Sum([2]+[3])) FROM LaTable where [2]úlse
Or [3]úlse)
FROM LaTable ;

ou encore :
SELECT Sum(-[1]) /(SELECT ABS(Sum([2]+[3])) FROM LaTable where [2]úlse
Or [3]úlse)
FROM LaTable
WHERE [2]= False or [3]= False;
dans cette derniere, on ne compte que les [1] à VRAI n'ayant pas [2] ET
[3] à Vrai

C'est bon ?

Bonjour Eric,

Tu as bonne mémoire ;-))

Par contre dans ta requête, il va me comtper 2 fois un enregistrement
qui a


vrai à 2 et vrai à 3, non ?
Si c'est le cas ça n'ira pas, mes calculs seront faussés...




--
A+
Eric
http://users.skynet.be/mpfa/
Archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr








1 2