OVH Cloud OVH Cloud

Aide pour une requete

3 réponses
Avatar
Guillaume JAY
Je bloque sur un truc qui dépasse mes compétences, j'en ai peur.

Voila, j'ai une table de personnes..

Pour chaque personne, j'ai une ou plusieurs lignes dans une table
competences, qui contient deux colonnes, la premiere etant la
competence, la seconde le niveau (de 1 à3) dans celle ci

Genre
Toto sait bien parler anglais (anglais,2) a un niveau scolaire en
allemand (allemand,1) et parle couramment l'espagnol (espagnol,3)

Enfin, rien d'extraordinaire.

Par contre, si je veux faire une requete qui me renvoie tout les gens
qui au moins le niv 1 en anglais, et le niv 1 en allemand , comment je
peux faire ?
(bon, j'ai bien une solution : je fais une jointure qui me renvoit
tous les gens qui ont l'un, ou l'autre, classé par nom, pis aprés, je
parcours ces résultat, et si je trouve le même nom sur deux lignes
consécutives, c'est bon. Sauf que :
- je sais pas écrire ca en sql-server (la jointure, ca devrait aller,
encore que j'ai un doute, mais aprés...)
- ca me parait pas élégant. )

Merci d'avance,

Guillaume

3 réponses

Avatar
Synopsis
Je pense que ta table compétence contient trois colonnes.

Competence
(
id_personne
, competence
, niveau
)

select id_personne
from competence
where (competence='anglais' and niveau>=1) or (competence='allemand' and
niveau>=1)
group by id_personne
having count(*)>=2

On peut simplifier la clause Where

Where competence in ('anglais', 'allemand')


Reste à monter la jointure avec la table personne, pour afin ses
caractéristiques.

"Guillaume JAY" a écrit dans le message de
news:
Je bloque sur un truc qui dépasse mes compétences, j'en ai peur.

Voila, j'ai une table de personnes..

Pour chaque personne, j'ai une ou plusieurs lignes dans une table
competences, qui contient deux colonnes, la premiere etant la
competence, la seconde le niveau (de 1 à3) dans celle ci

Genre
Toto sait bien parler anglais (anglais,2) a un niveau scolaire en
allemand (allemand,1) et parle couramment l'espagnol (espagnol,3)

Enfin, rien d'extraordinaire.

Par contre, si je veux faire une requete qui me renvoie tout les gens
qui au moins le niv 1 en anglais, et le niv 1 en allemand , comment je
peux faire ?
(bon, j'ai bien une solution : je fais une jointure qui me renvoit
tous les gens qui ont l'un, ou l'autre, classé par nom, pis aprés, je
parcours ces résultat, et si je trouve le même nom sur deux lignes
consécutives, c'est bon. Sauf que :
- je sais pas écrire ca en sql-server (la jointure, ca devrait aller,
encore que j'ai un doute, mais aprés...)
- ca me parait pas élégant. )

Merci d'avance,

Guillaume


Avatar
Fred BROUARD
Bonjour

CREATE TABLE t_competence
(personne VARCHAR(8),
competence VARCHAR(8),
niveau INT)

INSERT INTO t_competence VALUES ('Dupont', 'anglais', 3)
INSERT INTO t_competence VALUES ('Dupont', 'espagnol', 2)
INSERT INTO t_competence VALUES ('Dupont', 'allemand', 1)

INSERT INTO t_competence VALUES ('Duval', 'anglais', 1)
INSERT INTO t_competence VALUES ('Duval', 'espagnol', 2)
INSERT INTO t_competence VALUES ('Duval', 'allemand', 1)

INSERT INTO t_competence VALUES ('Dubois', 'anglais', 2)
INSERT INTO t_competence VALUES ('Dubois', 'espagnol', 2)


-- au moins le niv 1 en anglais, et le niv 1 en allemand

SELECT distinct personne
FROM t_competence c
WHERE EXISTS (SELECT *
FROM t_competence
WHERE competence = 'anglais'
AND niveau >= 1
AND personne = c.personne)
AND EXISTS (SELECT *
FROM t_competence
WHERE competence = 'allemand'
AND niveau >= 1
AND personne = c.personne)

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


Guillaume JAY a écrit:
Je bloque sur un truc qui dépasse mes compétences, j'en ai peur.

Voila, j'ai une table de personnes..

Pour chaque personne, j'ai une ou plusieurs lignes dans une table
competences, qui contient deux colonnes, la premiere etant la
competence, la seconde le niveau (de 1 à3) dans celle ci

Genre
Toto sait bien parler anglais (anglais,2) a un niveau scolaire en
allemand (allemand,1) et parle couramment l'espagnol (espagnol,3)

Enfin, rien d'extraordinaire.

Par contre, si je veux faire une requete qui me renvoie tout les gens
qui au moins le niv 1 en anglais, et le niv 1 en allemand , comment je
peux faire ?
(bon, j'ai bien une solution : je fais une jointure qui me renvoit
tous les gens qui ont l'un, ou l'autre, classé par nom, pis aprés, je
parcours ces résultat, et si je trouve le même nom sur deux lignes
consécutives, c'est bon. Sauf que :
- je sais pas écrire ca en sql-server (la jointure, ca devrait aller,
encore que j'ai un doute, mais aprés...)
- ca me parait pas élégant. )

Merci d'avance,

Guillaume


Avatar
Guillaume JAY
On Mon, 16 May 2005 23:49:53 +0200, Fred BROUARD


un peu en retard (congé, oublie), je te remercie (ainsi que synopsis)
pour vos reponse.

Merci de votre compétence et de votre disponibilité.

Guillaume