question SQL puissante

Le
jeorme
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi) que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Via
Le #11719181
Bonjour Jérôme.

Pour moi ça doit donner un truc du genre :
SELECT empl_nom, competences, niveau FROM Nom_Table WHERE (competences = 1
AND niveau = 4) OR (competences = 2 AND niveau = 3);
Normalemenent ça marche !

Via :)

"jeorme" news:%
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance








Le #11719171
Bonjour,

... where (competences = 1 AND niveau = 4) OR (competences = 2 AND niveau 3)

c'est pas sa que tu veux ?
où j'ai mal compris.

- Gilles -


"jeorme" #
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance








jeorme
Le #11719161
merci mais désolé car dans ce cas DUPOND apparaît quand même !!
"Via"
Bonjour Jérôme.

Pour moi ça doit donner un truc du genre :
SELECT empl_nom, competences, niveau FROM Nom_Table WHERE (competences = 1
AND niveau = 4) OR (competences = 2 AND niveau = 3);
Normalemenent ça marche !

Via :)

"jeorme" news:%
> Bonjour à tous,
>
> petite colle en SQL
>
> j'ai une table sous cette forme:
>
> empl_nom competences niveau
> DUPOND 1 4
> DUPOND 1 2
> DURAND 1 4
> DURAND 2 3
> DURAND 3 2
>
> je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)
que
> ma requete sorte les personnes dont :
> - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
>
> résultat:
>
> empl_nom competences niveau
> DURAND 1 4
> DURAND 2 3
>
>
>
> Merci d'avance
>
>
>
>
>
>




jeorme
Le #11719151
merci mais dans ce cas DUPOND apparaît également
c6of0n$dcj$
Bonjour,

... where (competences = 1 AND niveau = 4) OR (competences = 2 AND niveau


> 3)

c'est pas sa que tu veux ?
où j'ai mal compris.

- Gilles -


"jeorme" #
> Bonjour à tous,
>
> petite colle en SQL
>
> j'ai une table sous cette forme:
>
> empl_nom competences niveau
> DUPOND 1 4
> DUPOND 1 2
> DURAND 1 4
> DURAND 2 3
> DURAND 3 2
>
> je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)
que
> ma requete sorte les personnes dont :
> - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
>
> résultat:
>
> empl_nom competences niveau
> DURAND 1 4
> DURAND 2 3
>
>
>
> Merci d'avance
>
>
>
>
>
>




Patrice
Le #11719141
Ah ok, c'est en même temps.

Il y a plusieurs façons. Je ferais quelque chose comme :

-- Toutes les personnes
SELECT * FROM Personnes
- Récupérer la compétence 1 de la personne
JOIN Compétences AS Compétence1 ON Compétence1.Personne_fk=Personne_pk AND
Compétence1.Compétence=1
-- Récupérer la compétence 2 de la personne
JOIN Compétences AS Compérence2 ON Compétence2.Personne_fk=Personne_pk AND
Compétence2.Compétence=4
-- Niveau 4 pour la compétence 1 et niveau 3 pour la compétence 3
WHERE Compétence1.Niveau=4 AND Compétence2.Niveau=3

Ou encore

SELECT * FROM Personnes WHERE
EXISTS(SELECT 1 FROM Compétence WHERE Personne_fk=Personne_pk AND
Compétence=1 AND Niveau=4)
AND EXISTS(SELECT 1 FROM Compétence WHERE Personne_fk=Personne_pk
Compétence=2 AND Niveau=3)

Pour ton résultat final, le texte laisse penser que tu veux les personnes
mais comme exemple tu mets une ligne par personne par compétence trouvé. Il
faut adapter si besoin

Patrice


"jeorme" news:
merci mais désolé car dans ce cas DUPOND apparaît quand même !!
"Via"
> Bonjour Jérôme.
>
> Pour moi ça doit donner un truc du genre :
> SELECT empl_nom, competences, niveau FROM Nom_Table WHERE (competences 1
> AND niveau = 4) OR (competences = 2 AND niveau = 3);
> Normalemenent ça marche !
>
> Via :)
>
> "jeorme" > news:%
> > Bonjour à tous,
> >
> > petite colle en SQL
> >
> > j'ai une table sous cette forme:
> >
> > empl_nom competences niveau
> > DUPOND 1 4
> > DUPOND 1 2
> > DURAND 1 4
> > DURAND 2 3
> > DURAND 3 2
> >
> > je voudrais que grace à un miracle SQL (j'y ai séché tout l'après


midi)
> que
> > ma requete sorte les personnes dont :
> > - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
> >
> > résultat:
> >
> > empl_nom competences niveau
> > DURAND 1 4
> > DURAND 2 3
> >
> >
> >
> > Merci d'avance
> >
> >
> >
> >
> >
> >
>
>




Steve Kass
Le #11719101
select distinct empl_nom from T T1
where not exists (
select * from (
select 1 c, 4 n
union all
select 2, 3
) C
where not exists (
select * from T T2
where T2.empl_nom = T1.empl_nom
and C.c = T2.competences
and C.n = T2.niveau
)
)

Autre solution:

select empl_nom from T
where (
(competences = 1 and niveau = 4)
or (competences = 2 and niveau = 3)
) group by empl_nom
having count(*) = 2

Ici, si une des paires (competences, niveau) peut se trouver 2 fois ou
plus dans la table, essayez
having count(distinct competences*1000 + niveau) = 2

Steve Kass
Drew University

jeorme wrote:

Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi) que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance










alex
Le #11719081
Salut,
Voici une solution :
--------------
SELECT *
FROM (SELECT *
FROM TABLE
WHERE ((Comp = 1) AND (Niv = 4)) OR
((Comp = 2) AND (Niv = 3)))
WHERE (Nom IN
(SELECT Nom
FROM TABLE
WHERE ((Comp = 1) AND (Niv = 4)))) AND (Nom
IN
(SELECT Nom
FROM TABLE
WHERE (Comp = 2) AND (Niv = 3)))
-----------
@+
Bonne soirée

"jeorme" news:%
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance








bertrand david
Le #11673571
jeorme wrote:
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi) que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance









Peut-être ça :
(SELECT * FROM empl_nom WHERE competences=1 AND niveau=4) UNION (SELECT
* FROM empl_nom WHERE competences=2 AND niveau=3)

Bertrand David
Rebreyend Cyril
Le #11673131
Bonjour,

Soit je n'ai pas bien compris la question, soit la reponse est ci-dessous:

SELECT * FROM [nom_de_la_table]
WHERE (competences = 1 AND niveau=4) OR (competences = 2 AND niveau=3)


Cordialement,
Cyril Rebreyend



"bertrand david" news:40a865b0$0$31383$
jeorme wrote:
> Bonjour à tous,
>
> petite colle en SQL
>
> j'ai une table sous cette forme:
>
> empl_nom competences niveau
> DUPOND 1 4
> DUPOND 1 2
> DURAND 1 4
> DURAND 2 3
> DURAND 3 2
>
> je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
> ma requete sorte les personnes dont :
> - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
>
> résultat:
>
> empl_nom competences niveau
> DURAND 1 4
> DURAND 2 3
>
>
>
> Merci d'avance
>
>
>
>
>
>

Peut-être ça :
(SELECT * FROM empl_nom WHERE competences=1 AND niveau=4) UNION (SELECT
* FROM empl_nom WHERE competences=2 AND niveau=3)

Bertrand David


Publicité
Poster une réponse
Anonyme