Requete SQL probleme
benSQL
-
jee pee Messages postés 9439 Date d'inscription Statut Modérateur Dernière intervention -
jee pee Messages postés 9439 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour ;
je dois effectuer une requete SQL : Afficher la liste des salarié (nom ; prenom; Nom du diplome ) qui ont un BAC et/ou un BTS (ne pas utiliser les codes diplomes D1 et D2 );
mes tables sont : salarie qui regroupe les noms prenoms des salarié , le matricule est egalement precisé ; les salarie ont tous 1 matricule ; une table avoir_diplome regroupe les champs matricule et code_diplome
et les code diplome D1 D2 D3 etc ; code diplome est dans une table Nomme Diplome qui regroupe code diplome , nom du diplome (et niveau ( pas utile ici )
jai donc fais ma requête : sous le format sql la voici :
cela fonctionne cepedant une salarie possede les deux , et apparait donc deux fois dans la reponse.
D'où ma question ensuite : je dois cree une autre requete : afficher la liste des salariés (nom,prenom qui ont un BAC ET un bTS ducoup elle rentre dans ce cadre cependant elle apparait deux fois ; quelqu 'un aurait t'il une solution ?
merci d'avances , Cordialement
je dois effectuer une requete SQL : Afficher la liste des salarié (nom ; prenom; Nom du diplome ) qui ont un BAC et/ou un BTS (ne pas utiliser les codes diplomes D1 et D2 );
mes tables sont : salarie qui regroupe les noms prenoms des salarié , le matricule est egalement precisé ; les salarie ont tous 1 matricule ; une table avoir_diplome regroupe les champs matricule et code_diplome
et les code diplome D1 D2 D3 etc ; code diplome est dans une table Nomme Diplome qui regroupe code diplome , nom du diplome (et niveau ( pas utile ici )
jai donc fais ma requête : sous le format sql la voici :
SELECT SALARIE.NOM, SALARIE.PRENOM, DIPLOME.DIPLOME FROM SALARIE INNER JOIN (DIPLOME INNER JOIN AVOIR_DIPLOME ON DIPLOME.CODE_DIPLOME = AVOIR_DIPLOME.CODE_DIPLOME) ON SALARIE.MATRICULE = AVOIR_DIPLOME.MATRICULE WHERE (((DIPLOME.DIPLOME)="bac" Or (DIPLOME.DIPLOME)="bts")) ORDER BY SALARIE.NOM;
cela fonctionne cepedant une salarie possede les deux , et apparait donc deux fois dans la reponse.
D'où ma question ensuite : je dois cree une autre requete : afficher la liste des salariés (nom,prenom qui ont un BAC ET un bTS ducoup elle rentre dans ce cadre cependant elle apparait deux fois ; quelqu 'un aurait t'il une solution ?
merci d'avances , Cordialement
2 réponses
-
Bonjour,
Tu fais un select juste nom, prénom et en fin tu ajoutes ungroup by
nom, prénom.having count(*) >1
.
-
-
-
SELECT SALARIE.NOM, SALARIE.PRENOM FROM SALARIE INNER JOIN (DIPLOME INNER JOIN AVOIR_DIPLOME ON DIPLOME.CODE_DIPLOME = AVOIR_DIPLOME.CODE_DIPLOME) ON SALARIE.MATRICULE = AVOIR_DIPLOME.MATRICULE WHERE (((DIPLOME.DIPLOME)="bac" Or (DIPLOME.DIPLOME)="bts")) GROUP BY SALARIE.NOM, SALARIE.PRENOM HAVING COUNT(*) > 1;
-
-
derniere question jai deux requête ou il met demander de proposer deux version différente pour arriver au meme resultat :
- listes des salariés (nom,prenom,nom du service, salaire) qui sont affectés au services informatique et expeditions. Le resultat sera trieé par service ( la requete ne devra pas mentionner les codes 'EXP' et INF des services
j'ai donc fait :
SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE FROM SERVICE INNER JOIN (EMPLOI INNER JOIN SALARIE ON EMPLOI.CODE = SALARIE.CODE_EMPLOI) ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE WHERE (((SALARIE.CODE_SERVICE)='EXP' Or (SALARIE.CODE_SERVICE)='INF')) ORDER BY SERVICE.NOM_SERVICE;
si jamais tu connais une alternative pour obtenir un resultat similaire
pareil pour celle ci : - liste des salariés (nom,prenom,nom du service , salaire ) qui sont affecter au services commercial et expeditions et qui percoit superieur a 2000 euros . le resultat sera trier par service , la requete ne devra pas mentionner le code 'EXP' et 'COM' des services
j'ai fais cela :
SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE FROM SERVICE INNER JOIN SALARIE ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE WHERE (((SALARIE.CODE_SERVICE)='EXP' Or (SALARIE.CODE_SERVICE)='COM')) ORDER BY SALARIE.CODE_SERVICE;
merci d'avance
-
-
effectivement il me semble que cela fonctionne ; avez vous une deuxieme methode pour celle ci ?
SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE FROM SERVICE INNER JOIN SALARIE ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE WHERE (((SERVICE.NOM_SERVICE)='Expéditions' Or (SERVICE.NOM_SERVICE)='Commercial') AND ((SALARIE.SALAIRE)>2000));
-
-
parfait effectivement ; je vous remercie sincerement ;
et pour celle ci avez vous une alternative ?
SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE
FROM SERVICE INNER JOIN (EMPLOI INNER JOIN SALARIE ON EMPLOI.CODE = SALARIE.CODE_EMPLOI) ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE
WHERE (((SERVICE.NOM_SERVICE)="Expéditions" Or (SERVICE.NOM_SERVICE)='Informatique'))
ORDER BY SERVICE.NOM_SERVICE;
-