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. )
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <gjay_diespammer-die@free.fr> a écrit dans le message de
news: 0g6h81lbic7m6a60mi5jkevnli8m322p55@4ax.com...
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. )
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
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
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. )
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
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
On Mon, 16 May 2005 23:49:53 +0200, Fred BROUARD
<brouardf@club-internet.fr>
un peu en retard (congé, oublie), je te remercie (ainsi que synopsis)
pour vos reponse.
Merci de votre compétence et de votre disponibilité.