PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Requête
Requête
Iniciado por tbu, 03,mar. 2006 14:46 - 5 respuestas
Publicado el 03,marzo 2006 - 14:46
Mon fichier stockant des candidats est ainsi fait:
Candidat1: Allemand
Candidat1: Anglais
Candidat1: Russe
Candidat2: Anglais
Candidat3: Anglais
Candidat3: Italien

etc...

Comment rédiger une requête pour extraitre les candidats qui parlent Allemand ET anglais ET ... (ET ou OU d'ailleurs)

Le problème est qu'il y a une ligne par langue maîtrisée (je ne veux pas créer x colonnes langues partant du principe qu'un candidat pourrait maîtriser une infinité de langues)

Merci de votre réponse
Publicado el 04,marzo 2006 - 11:03
Si le candidat peut parler une infinité de langues il serait préférable de
n'avoir qu'une ligne par candidat dans le fichier Candidat, d'avoir un
fichier Langues listant toutes les langues et un fichier intermédiaire
LanguesCandidat.

Il serait alors facile d'écrire un requête sélectionnant tous les candidats
parlant une langue ou les langues d'une liste.

--
Cordialement.

Patrick Bouquet
Membre WINDASSO - Association des utilisateurs WxxDEV(c)
http://www.windasso.org


"Bubu" <tbu@mbi.fr> a écrit dans le message de news:
440820c7$1@news.pcsoft.fr...

Mon fichier stockant des candidats est ainsi fait:
Candidat1: Allemand
Candidat1: Anglais
Candidat1: Russe
Candidat2: Anglais
Candidat3: Anglais
Candidat3: Italien

etc...

Comment rédiger une requête pour extraitre les candidats qui parlent
Allemand ET anglais ET ... (ET ou OU d'ailleurs)

Le problème est qu'il y a une ligne par langue maîtrisée (je ne veux pas
créer x colonnes langues partant du principe qu'un candidat pourrait
maîtriser une infinité de langues)

Merci de votre réponse
Publicado el 04,marzo 2006 - 21:31
Mais c'est le cas: j'ai un fichier central "Candidat" un fichier "Langues" et un fichier de liaison 'Candidat_Langues" (idem pour les diplomes d'ailleurs).

C'est donc bien une requête sur un fichier de liaison que je voudrais réaliser.
Publicado el 06,marzo 2006 - 11:53
Bonjour,

Voici une façon de procéder.

Avec l'éditeur de requête, il suffit de sélectionner les rubriques Candidat
et Langue.

Ensuite il faut mettre :
une condition sur Langue : est dans la liste Param1
Activer la suppression des doublons.

A l'exécution de la requête il sufit de passer une chaîne contenant la ou
les langues recherchées en les séparant par des ";".

Vous obtiendrez la liste des candidats parlant au moins l'une des langues de
la liste.

Maintenant il faut faire une seconde requête sur la première requête.
Sélectionner les deux rubriques Candidat et Langue.
Faire un comptage sur la rubrique langue.
Vous obtiendrez la liste des candidats avec le nombre de langues parlées.

Si la liste contenait 3 langues, les candidats avec la somme=3 parlent les 3
langues.
Ceux dont la somme est 2 parlent 2 parmi les 3 langues...

--
Cordialement.

Patrick Bouquet
Membre WINDASSO - Association des utilisateurs WxxDEV(c)
http://www.windasso.org


"bubu" <tbu@mbi.fr> a écrit dans le message de news:
4409a914$1@news.pcsoft.fr...
Mais c'est le cas: j'ai un fichier central "Candidat" un fichier "Langues"
et un fichier de liaison 'Candidat_Langues" (idem pour les diplomes
d'ailleurs).

C'est donc bien une requête sur un fichier de liaison que je voudrais
réaliser.
Publicado el 06,marzo 2006 - 15:14
Bonjour,
En SQL, c'est assez facile, il suffit de faire une autojointure:
select t1.CodeCandidat from MaTable as t1,MaTable as t2 where t1.CodeCandidat = t2.CodeCandidat and t1.langue in ('ANGLAIS','ALLEMAND') and t2.langue in ('ANGLAIS','ALLEMAND') and t1.langue <> t2.langue

Avec le OU, c'est encore plus simple:
select CodeCandidat from MaTable where langue in ('ALLEMAND','ANGAIS')

Frédéric.
Publicado el 06,marzo 2006 - 16:42
Ou encore plus simple:
Select CodeCandidat,count(*) from MaTable where Langue in ('ALLEMAND','ANGLAIS') group by CodeCandidat having count(*) = 2

Frédéric.