Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/05/2011, 02h52   #1
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Par défaut Addition de comptes différents et pb agrégat

Bonsoir !

J'ai besoin de faire une requête de telle sorte :
J'ai plusieurs contrats industriels que je liste avec la société relative, la durée du contrat, le montant et le nombre de personnes impliquées dans le contrat.
Le soucis est que j'ai 3 groupes de personnes impliquées : des Permanents, des Contractuels et des Profs invités.
J'ai donc fait 3 requêtes différentes une listant les permanent, une les contractuels et une les profs invités.
Par la suite, j'ai fait une union de ces trois requêtes afin d'avoir un total.

Le soucis est que ça m'affiche quelque chose du genre :

SOC 1 2 (nbre de permanents)
SOC 2 3 (nbre de permanents)
SOC 2 1 (nbre de contractuels)

Mon premier problème est que : nous ne savons pas quel compte est le permanent et quel compte est le contractuel (je l'ai mis entre parenthèses ici). En titre de colonne j'ai "CompteDeCode_Permanents" mais il y a aussi le compte du contractuel au milieu.

Mon deuxième problème : Peut-on arriver à quelque chose de ce genre au final :

SOC 1 2
SOC 2 4

Additionner le compte permanent et contractuel pour faire un compte total relatif a la société ?

Voici mon code SQL :
Code sql :
1
2
3
4
5
6
7
8
9
10
11
SELECT T_CONTRATS_INDUSTRIELS.Code_societe, T_SOCIETES.Nom_societe, T_CONTRATS_INDUSTRIELS.Duree_contrat_industriel, T_CONTRATS_INDUSTRIELS.Code_respo_contrat_industriel, T_CONTRATS_INDUSTRIELS.Montant_contrat_industriel, Count(T_PERMANENTS.Code_permanent) AS CompteDeCode_permanent
FROM (T_EQUIPES INNER JOIN ((T_PROJETS_RECHERCHES INNER JOIN (T_SOCIETES INNER JOIN T_CONTRATS_INDUSTRIELS ON T_SOCIETES.Code_societe = T_CONTRATS_INDUSTRIELS.Code_societe) ON T_PROJETS_RECHERCHES.Code_projet_recherche = T_CONTRATS_INDUSTRIELS.Code_projet_recherche) INNER JOIN V_Etre_implique_projet_equipe ON T_PROJETS_RECHERCHES.Code_projet_recherche = V_Etre_implique_projet_equipe.Code_projet_recherche) ON T_EQUIPES.Nom_equipe = V_Etre_implique_projet_equipe.Nom_equipe) INNER JOIN T_PERMANENTS ON T_EQUIPES.Nom_equipe = T_PERMANENTS.Nom_equipe
GROUP BY T_CONTRATS_INDUSTRIELS.Code_societe, T_SOCIETES.Nom_societe, T_CONTRATS_INDUSTRIELS.Duree_contrat_industriel, T_CONTRATS_INDUSTRIELS.Code_respo_contrat_industriel, T_CONTRATS_INDUSTRIELS.Montant_contrat_industriel
UNION
SELECT T_CONTRATS_INDUSTRIELS.Code_societe, T_SOCIETES.Nom_societe, T_CONTRATS_INDUSTRIELS.Duree_contrat_industriel, T_CONTRATS_INDUSTRIELS.Code_respo_contrat_industriel, T_CONTRATS_INDUSTRIELS.Montant_contrat_industriel, Count(T_CONTRACTUELS.Code_contractuel) AS CompteDeCode_contractuel
FROM (T_SOCIETES INNER JOIN ((T_PROJETS_RECHERCHES INNER JOIN T_CONTRATS_INDUSTRIELS ON T_PROJETS_RECHERCHES.Code_projet_recherche = T_CONTRATS_INDUSTRIELS.Code_projet_recherche) INNER JOIN ((T_EQUIPES INNER JOIN T_PERMANENTS ON T_EQUIPES.Nom_equipe = T_PERMANENTS.Nom_equipe) INNER JOIN V_Etre_implique_projet_equipe ON T_EQUIPES.Nom_equipe = V_Etre_implique_projet_equipe.Nom_equipe) ON T_PROJETS_RECHERCHES.Code_projet_recherche = V_Etre_implique_projet_equipe.Code_projet_recherche) ON T_SOCIETES.Code_societe = T_CONTRATS_INDUSTRIELS.Code_societe) INNER JOIN T_CONTRACTUELS ON T_PERMANENTS.Code_permanent = T_CONTRACTUELS.Code_permanent
GROUP BY T_CONTRATS_INDUSTRIELS.Code_societe, T_SOCIETES.Nom_societe, T_CONTRATS_INDUSTRIELS.Duree_contrat_industriel, T_CONTRATS_INDUSTRIELS.Code_respo_contrat_industriel, T_CONTRATS_INDUSTRIELS.Montant_contrat_industriel
UNION
SELECT T_CONTRATS_INDUSTRIELS.Code_societe, T_SOCIETES.Nom_societe, T_CONTRATS_INDUSTRIELS.Duree_contrat_industriel, T_CONTRATS_INDUSTRIELS.Code_respo_contrat_industriel, T_CONTRATS_INDUSTRIELS.Montant_contrat_industriel, Count(T_PROFS_INVITES.Code_prof_invite) AS CompteDeCode_prof_invite
FROM (T_SOCIETES INNER JOIN ((T_PROJETS_RECHERCHES INNER JOIN T_CONTRATS_INDUSTRIELS ON T_PROJETS_RECHERCHES.Code_projet_recherche = T_CONTRATS_INDUSTRIELS.Code_projet_recherche) INNER JOIN ((T_EQUIPES INNER JOIN T_PERMANENTS ON T_EQUIPES.Nom_equipe = T_PERMANENTS.Nom_equipe) INNER JOIN V_Etre_implique_projet_equipe ON T_EQUIPES.Nom_equipe = V_Etre_implique_projet_equipe.Nom_equipe) ON T_PROJETS_RECHERCHES.Code_projet_recherche = V_Etre_implique_projet_equipe.Code_projet_recherche) ON T_SOCIETES.Code_societe = T_CONTRATS_INDUSTRIELS.Code_societe) INNER JOIN T_PROFS_INVITES ON T_PERMANENTS.Code_permanent = T_PROFS_INVITES.Code_permanent
GROUP BY T_CONTRATS_INDUSTRIELS.Code_societe, T_SOCIETES.Nom_societe, T_CONTRATS_INDUSTRIELS.Duree_contrat_industriel, T_CONTRATS_INDUSTRIELS.Code_respo_contrat_industriel, T_CONTRATS_INDUSTRIELS.Montant_contrat_industriel;

J'ai un autre problème avec une autre requête (encore !) :

Ça me met le problème typique que mon expression ne fait pas partie de la fonction d'agrégat ... J'ai essayé de faire comme la requête d'au dessus (GROUP BY à la fin) puisque j'avais le même problème. Mais ça ne marche toujours pas, il y a un problème avec le HAVING !

Voilà mon code SQL :

Code sql :
1
2
3
SELECT V_Publier_personne_journal.Code_permanent, T_PERMANENTS.Nom_permanent, T_PERMANENTS.Prenom_permanent, Count(V_Publier_personne_journal.Nom_article_journal) AS CompteDeNom_article_journal, T_PUBLICATIONS.Annee_publication_journal, T_PUBLICATIONS.Annee_publication_journal
FROM T_PUBLICATIONS INNER JOIN (T_PERMANENTS INNER JOIN V_Publier_personne_journal ON T_PERMANENTS.Code_permanent = V_Publier_personne_journal.Code_permanent) ON T_PUBLICATIONS.Code_article_journal = V_Publier_personne_journal.Nom_article_journal
HAVING (((T_PUBLICATIONS.Annee_publication_journal)>=1/1/2005) AND ((T_PUBLICATIONS.Annee_publication_journal)<=2010))
Dans cette requête je dois comte le nombre de publications d'un permanent entre 2005 et 2010

Merci !!
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 08h58   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Bonjour,
L'agrégat fonctionne de la manière suivante :
  • Chaque colonne doit avoir une fonction d'agrégat (somme, compte, regroupement...).
  • Chaque colonne, où une condition est employée, sera inclue dans le HAVING Celle qui a un agrégat de type Où ne pourra jamais être affichée et sera versée au WHERE.

Exemple :

Code :
1
2
3
4
5
6
PARAMETERS [titre recherché] Text ( 255 );
SELECT Count(articles.N°) AS CompteDeN°, articles.Titre
FROM articles
WHERE (((articles.Type)="film"))
GROUP BY articles.Titre
HAVING (((articles.Titre) Like "*" & [titre recherché] & "*"));
A mon avis, si tu as des difficultés avec les HAVING, WHERE et GROUP BY, tu devrais passer par le générateur.

Je ne comprend pas pourquoi tu fais des requêtes UNION alors que, sauf erreur de ma part, tu utilises strictement les mêmes tables et le même affichage dans les 3.

Note que habituellement, les requêtes UNION sont un ensemble de requêtes hétérogènes.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 12h26   #3
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Bonjour,

merci de m'avoir répondu.

Je comprend maintenant ce qu'est une fonction d'agrégat. Mais "Expression" ne compte pas comme telle ?
Si je rajoute un
GROUP BY T_PUBLICATIONS.Annee_publication_journal
dans ma deuxième requête juste avant le HAVING ça me met la même chose.

Mais je ne peux pas mettre "Où" à mon code permanent car je dois le voir dans ma requête. (Quand vous parliez de générateur, vous vouliez dire quoi ...?)

Pour ma première requête, je compte les Codes permanents UNION le compte des codes contractuels UNION le compte des codes profs_invités sachant que contractuels et profs invités sont liés à Permanent. Je voulais savoir si en résultat il y avait un moyen de distinguer quel compte était celui des Code_permanents et lequel celui des Code_contractuels.

Merci encore,
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 12h44   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Douie et Loufab,

Je me permets de m'immiscer...

Tout est là :
Citation:
Envoyé par Loufab
.../... tu devrais passer par le générateur.
Citation:
Envoyé par Douie
Quand vous parliez de générateur, vous vouliez dire quoi ...?
==> l'assistant de création de requête.

Cet assistant te permet de concevoir ta requête à l'aide d'une vue de type "Relation" : très pratique. Ensuite, après mise au point, tu peux récupérer le code en mode SQL.

A noter que tu ne peux créer de requête UNION que en mode SQL ; mais les requêtes concernées le peuvent.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 12h52   #5
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Ah et bien je l'ai fait en mode générateur !
C'est pour ça que je ne connais pas les GROUP BY vu que je ne fait jamais de code SQL direct ...
Du coup là je ne sais pas trop quoi faire ... J'ai mis mes deux tables Publications et Permanents ensemble (vu que c'est une relation (n,m) j'ai mis une 3ème table de verbe). j'ai demandé des différents codes et je suis tombée sur le code SQL que je vous ai transmis (mais qui ne marche pas)
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 13h06   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Peux-tu décrire la structure des tables en présence (nom de la table, clé primaire et quelques champs significatifs) ?
Peux-tu, également, décrire les relations que tu as établies entre ces tables (1---n) ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 13h30   #7
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Ma requête doit lister le nombre de publications par permanents (des chercheurs d'un laboratoire) entre 2005 et 2010.

J'ai donc une table permanents avec comme attributs :
- Code permanent (clé primaire)
- Nom permanent
- Prénom permanent
- téléphone permanent etc.

Une table Publications avec :
-Code_article_journal (clé primaire)
-Nom_journal
-Edition_journal
-Type_journal
-Volume_journal
-Année_publication_journal (entier long)

Sachant que la relation entre permanents et Publications est (n,m) j'ai une table V_Publier_personne_journal avec :
-Code_permanent
-Code_article_journal
qui sont deux clés primaires

Sur ma requête j'ai ensuite demandé :
Le code permanent issu de la table V_Publier_personne_journal en tant qu'expression
Le nom permanent issu de la table Permanents en tant qu'expression
Le prénom permanent issu de la table Permanents en tant qu'expression
Le compte du Code_article_journal issu de la table V_Publier_personne_journal
L'année_publication_journal issu de la table Publications en tant qu'expression. J'ai demandé, dans les critères, que l'année soit >=2005 et <=2010
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 13h54   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Donc, via l'assistant :
  • ajouter la table Permanents (FROM) ;
  • ajouter la table V_Publier_personne_journal (FROM) ;
  • ajouter la table Publications (FROM) ;
  • lier Permanents à V_Publier_personne_journal, via Code_permanent avec flèche à droite (LEFT JOIN) ;
  • lier V_Publier_personne_journal à Publications, via Code_article_journal avec flèche à droite (LEFT JOIN) ;
  • passer en requête groupée (GROUP BY) ;
  • sélectionner Code_permanent, Nom permanent, Année_publication_journal, count(*) (SELECT) ;
  • pour des raisons de performance, sélectionner, une nouvelle fois, Année_publication_journal avec critère "Où" "entre 2005 et 2010" ==> en effet, il vaut mieux exclure AVANT le comptage (différence entre WHERE et HAVING).

Tu devrais obtenir ce que tu souhaites.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 14h52   #9
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Merci, ça marche !

Mais j'ai toujours un petit "soucis"
J'ai par exemple un permanent qui a 2 publications, une en 2006 et deux en 2008.
Lorsque je lance ma requête, au lieu de mettre :

Code permanent, Compte de Code_article_journal, EXPR1004, Année publication
Code :
1
2
PERM01                                                  1           2006            2006
PERM01                                                  2           2008            2008
Qu'est ce que "EXPR1004" ??
Je pense que ça vient du fait que j'ai copié deux fois l'attribut 'Année publication' dans ma requête, une fois avec la condition >=2005 et une fois avec <=2010.

Voici mon code :


Code :
1
2
3
4
SELECT T_PERMANENTS.Nom_permanent, T_PERMANENTS.Prenom_permanent, V_Pubier_permanent_publication.Code_permanent, Count(V_Pubier_permanent_publication.Code_publication) AS CompteDeCode_publication, T_PUBLICATIONS.Annee_publication_journal, T_PUBLICATIONS.Annee_publication_journal
FROM T_PUBLICATIONS INNER JOIN (T_PERMANENTS INNER JOIN V_Pubier_permanent_publication ON T_PERMANENTS.[Code_permanent] = V_Pubier_permanent_publication.[Code_permanent]) ON T_PUBLICATIONS.[Code_publication] = V_Pubier_permanent_publication.[Code_publication]
GROUP BY T_PERMANENTS.Nom_permanent, T_PERMANENTS.Prenom_permanent, V_Pubier_permanent_publication.Code_permanent, T_PUBLICATIONS.Annee_publication_journal, T_PUBLICATIONS.Annee_publication_journal
HAVING (((T_PUBLICATIONS.Annee_publication_journal)>=2005 And (T_PUBLICATIONS.Annee_publication_journal)<=2010));
J'ai aussi toujours le même "soucis" sur ma requête 1 (je dois répertorier le nombre de contrats industriels et compter le nombre de personnes y prenant part) :
Lors de l’exécution de ma requête j'ai par exemple, pour Areva qui compte 2 permanents et un contractuel :

Code :
1
2
3
Nom Societe, ComptedeCode_permanents
AREVA                   2
AREVA                   1
On ne sait pas quel compte est le compte des permanents et quel compte est celui des contractuels .. Je suppose qu'on ne peut pas y faire grand chose et qu'on ne peut pas faire en sortie d'obtenir :

Code :
1
2
Nom Societe, ComptedeCode_permanents
AREVA                    3
Merci encore à tous !
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 15h37   #10
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Le HAVING montre que tu n'as pas utilisé "Où" (WHERE) dans l'assistant. Il faut donc utiliser "Où" au lieu de "Regroupement".

Peux-tu poster l'image graphique de ta requête ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 16h00   #11
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Voilà pour ma requête sur les publications par permanents entre 2005 et 2010 :

http://www.casimages.com/img.php?i=1...0439174977.jpg
http://www.casimages.com/img.php?i=1...0505388383.jpg


Et pour la requête avec les sociétés :

http://www.casimages.com/img.php?i=1...0533281732.jpg

Pour celle là, je n'ai pas de mode création car c'est une UNION de 3 requêtes.
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 16h08   #12
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Tu n'as pas respecté l'ordre des tables, c'est important. Donc, repars d'une requête vide et, dans l'ordre :
  • ajouter la table Permanents (FROM) ;
  • ajouter la table V_Publier_personne_journal (FROM) ;
  • ajouter la table Publications (FROM) ;
  • lier Permanents à V_Publier_personne_journal, via Code_permanent avec flèche à droite (LEFT JOIN) ;
  • lier V_Publier_personne_journal à Publications, via Code_article_journal avec flèche à droite (LEFT JOIN) ;
  • passer en requête groupée (GROUP BY) ;
  • sélectionner Code_permanent, Nom permanent, Année_publication_journal, count(*) (SELECT) ;
  • pour des raisons de performance, sélectionner, une nouvelle fois, Année_publication_journal avec critère "Où" et saisir "entre 2005 et 2010" (BETWEEN) ==> en effet, il vaut mieux exclure AVANT le comptage (différence entre WHERE et HAVING). Donc, remplacer "Regroupement" par "Où".
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 16h55   #13
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Merci ça marche !

Y a t-il moyen de remplacer "Regroupement" par "Où" dans le Code SQL de mon autre requête (où on liste les contrats industriels) afin de pouvoir faire un compte total au lieu d'un nombre permanents et d'un nombre contractuels ?
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 17h11   #14
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Oui, via l'assistant, par la même manière.

Si tu parles de ta requête UNION, passes par l'assistant pour chaque requête, appliques la même méthode, et crées ta requête UNION par copier/coller du code de tes trois requêtes.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 20h49   #15
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Merci mais bizarrement ça ne marche pas ...
J'ai fait la même méthode, pas de soucis ça me compte les permanents mais ça ne compte pas les contractuels alors qu'il y en a un.
Je pense que je vais laisser comme c'est car je ne vois pas non plus où mettre le "Où" ... Pour mon autre requête je l'ai mis sur la date où il y avait une condition mais là, je n'ai aucune condition, juste un compte.
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 10h04   #16
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Douie,

Citation:
Envoyé par Douie
Je pense que je vais laisser comme c'est car je ne vois pas non plus où mettre le "Où"
==> sur la ligne "Opération", il y a une liste déroulante : le choix du "Où" génère le WHERE et non pas le HAVING.


En revérifiant l'image graphique de ta requête, plusieurs anomalies :
- pourquoi as-tu choisi "Expression" pour le premier Annee_publication ? ==> il faut laisser "Regroupement" ;
- il faut remplacer la colonne "Code_Prublication" par Count(*) et choisir "Expression" ;
- la dernière colonne Annee_publication doit être "Où" puis "entre 2005 et 2010".

En final, il te faut :
- Nom
- Prenom
- Code
- Annee
- Count(*)
- Annee ==> "Où", "entre 2005 et 2010".
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 16h01   #17
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Excusez moi de mon retard de réponse, j'ai eu quelques soucis avec internet !

En fait mon premier problème reste, l'addition de deux Codes ne marche pas. C'est ce que j'essayais de faire sur ma table de contrats industriels. Je prend une autre requête qui a le même problème et qui est peut être plus compréhensible : Par exemple, je dois compter le nombre de Projets nationaux et le nombre de Projets internationaux sur un Projet Recherche.

J'ai donc fait une première requête qui compte le nombre de projets internationaux :

Code :
1
2
3
SELECT Count(T_PROJETS_INTERNATIONAUX.Code_projet_inter) AS CompteDeCode_projet_inter, T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche
FROM T_PROJETS_RECHERCHES INNER JOIN T_PROJETS_INTERNATIONAUX ON T_PROJETS_RECHERCHES.Code_projet_recherche = T_PROJETS_INTERNATIONAUX.Code_projet_recherche
GROUP BY T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche;

Et une deuxième qui compte le nombre de projets nationaux :

Code :
1
2
3
SELECT Count(T_PROJETS_NATIONAUX.Code_projet_nat) AS CompteDeCode_projet_nat, T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche
FROM T_PROJETS_RECHERCHES INNER JOIN T_PROJETS_NATIONAUX ON T_PROJETS_RECHERCHES.Code_projet_recherche = T_PROJETS_NATIONAUX.Code_projet_recherche
GROUP BY T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche;
J'ai ensuite fait une union des deux en essayant d'intégrer "somme" car si je fais une UNION simple, voilà ce que j'ai :

CompteDeCode_projet_nat    Code_projet_recherche    Nom_projet_recherche    Date_debut_projet_recherche    Code_chef_projet_recherche    Durée_projet_recherche
1    PRECH001    TABLEAU    08/08/2008    PERM    
1    PRECH001    TABLEAU    08/08/2008    PERM    
1    PRECH674    BLOP            02/02/1994    PERM    7
Et voilà ce que je veux :

CompteDeCode_projet_nat    Code_projet_recherche    Nom_projet_recherche    Date_debut_projet_recherche    Code_chef_projet_recherche    Durée_projet_recherche
2    PRECH001    TABLEAU    08/08/2008    PERM    
1    PRECH674    BLOP            02/02/1994    PERM    7
Voilà donc ma requête UNION :

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche, sum(CompteDeCode_projet_nat+CompteDeCode_projet_inter)
FROM
SELECT Count(T_PROJETS_NATIONAUX.Code_projet_nat) AS CompteDeCode_projet_nat, 0 as CompteDeCode_projet_inter, T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche
FROM T_PROJETS_RECHERCHES INNER JOIN T_PROJETS_NATIONAUX ON T_PROJETS_RECHERCHES.Code_projet_recherche = T_PROJETS_NATIONAUX.Code_projet_recherche
GROUP BY T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche
 
UNION ALL 
 
SELECT Count(T_PROJETS_INTERNATIONAUX.Code_projet_inter) AS CompteDeCode_projet_inter, 0 as  CompteDeCode_projet_nat, T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche
FROM T_PROJETS_RECHERCHES INNER JOIN T_PROJETS_INTERNATIONAUX ON T_PROJETS_RECHERCHES.Code_projet_recherche = T_PROJETS_INTERNATIONAUX.Code_projet_recherche
GROUP BY T_PROJETS_RECHERCHES.Code_projet_recherche, T_PROJETS_RECHERCHES.Nom_projet_recherche, T_PROJETS_RECHERCHES.Date_debut_projet_recherche, T_PROJETS_RECHERCHES.Code_chef_projet_recherche, T_PROJETS_RECHERCHES.Durée_projet_recherche;
Mais elle ne marche pas. Je sais que c'est une erreur de syntaxe car j'ai essayé de faire comme sur un exemple que j'ai trouvé sur internet (avec la SUM) mais sans grand succès.
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 16h46   #18
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Douie,

Il faut utiliser les balises "Code" pour écrire du code => bouton #.

Bien, procédons par étape.
Citation:
Envoyé par Douie
J'ai donc fait une première requête qui compte le nombre de projets internationaux :

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT Count(T_PROJETS_INTERNATIONAUX.Code_projet_inter) AS CompteDeCode_projet_inter,
T_PROJETS_RECHERCHES.Code_projet_recherche,
T_PROJETS_RECHERCHES.Nom_projet_recherche,
T_PROJETS_RECHERCHES.Date_debut_projet_recherche,
T_PROJETS_RECHERCHES.Code_chef_projet_recherche,
T_PROJETS_RECHERCHES.Durée_projet_recherche
FROM T_PROJETS_RECHERCHES INNER JOIN T_PROJETS_INTERNATIONAUX ON
T_PROJETS_RECHERCHES.Code_projet_recherche = T_PROJETS_INTERNATIONAUX.Code_projet_recherche
GROUP BY T_PROJETS_RECHERCHES.Code_projet_recherche,
T_PROJETS_RECHERCHES.Nom_projet_recherche,
T_PROJETS_RECHERCHES.Date_debut_projet_recherche,
T_PROJETS_RECHERCHES.Code_chef_projet_recherche,
T_PROJETS_RECHERCHES.Durée_projet_recherche;
==> tu peux remplacer Count(T_PROJETS_INTERNATIONAUX.Code_projet_inter) par Count(*), mais c'est un détail. Que te donne cette première requête, avec ton exemple ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 21h49   #19
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Voilà ce qu'elle me donne :

CompteDeCode_projet_inter Code_projet_recherche Nom_projet_recherche Date_debut_projet_recherche Code_chef_projet_recherche Durée_projet_recherche
1 PRECH001 TABLEAU 08/08/2008 PERM
1 PRECH674 BLOP 02/02/1994 PERM 7

Elle me donne bien le compte des projets internationaux par projets recherche.
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 22h05   #20
Invité de passage
 
Femme
Étudiant
Inscription : mai 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 18
Points : 0
Points : 0
Finalement, j'ai presque réussi, avec ce code SQL :


Code sql :
1
2
3
SELECT Requête4a.Code_projet_recherche, Requête4a.Nom_projet_recherche, Requête4a.Date_debut_projet_recherche, Requête4a.Code_chef_projet_recherche, Requête4a.Durée_projet_recherche, Sum(([CompteDeCode_projet_nat]+[CompteDeCode_projet_inter])) AS Expr1
FROM Requête4a INNER JOIN (Requête4b INNER JOIN T_CONTRATS_INDUSTRIELS ON Requête4b.[Code_projet_recherche] = T_CONTRATS_INDUSTRIELS.[Code_projet_recherche]) ON Requête4a.[Code_projet_recherche] = T_CONTRATS_INDUSTRIELS.[Code_projet_recherche]
GROUP BY Requête4b.CompteDeCode_projet_nat, Requête4a.CompteDeCode_projet_inter, Requête4a.Code_projet_recherche, Requête4a.Nom_projet_recherche, Requête4a.Date_debut_projet_recherche, Requête4a.Code_chef_projet_recherche, Requête4a.Durée_projet_recherche;

Sachant que mes requêtes 4a et 4b sont les deux précédentes, j'ai pu avoir ça :
Code_projet_recherche Nom_projet_recherche Date_debut_projet_recherche Code_chef_projet_recherche Durée_projet_recherche Expr1
PRECH001 TABLEAU 08/08/2008 PERM 2

Avec Expr1 la somme du compte des projets.
Bon, le soucis c'est que je n'ai pas le deuxième projet recherche qui ne compte qu'un projet international et 0 projets nationaux
Douie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h49.


 
 
 
 
Partenaires

Hébergement Web