|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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 :
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 :
Merci !! |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Fabrice CONSTANSIngénieur développement logiciels Inscription : avril 2005 Messages : 7 085 ![]() |
Bonjour,
L'agrégat fonctionne de la manière suivante :
Exemple : Code :
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 |
||
|
00
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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, |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour Douie et Loufab,
Je me permets de m'immiscer... Tout est là : Citation:
Citation:
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. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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) |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
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. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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 |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Donc, via l'assistant :
Tu devrais obtenir ce que tu souhaites.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#9 | ||||||||
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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 :
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 :
Lors de l’exécution de ma requête j'ai par exemple, pour Areva qui compte 2 permanents et un contractuel : Code :
Code :
|
||||||||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
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. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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. |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Tu n'as pas respecté l'ordre des tables, c'est important. Donc, repars d'une requête vide et, dans l'ordre :
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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 ? |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
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. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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. |
|
|
00
|
|
|
#16 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour Douie,
Citation:
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. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
00
|
|
|
#17 | ||||||
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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 :
Et une deuxième qui compte le nombre de projets nationaux : Code :
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 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 Code :
|
||||||
|
|
00
|
|
|
#18 | |||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour Douie,
Il faut utiliser les balises "Code" pour écrire du code => bouton #. Bien, procédons par étape. Citation:
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|||
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
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. |
|
|
00
|
|
|
#20 | ||
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 18 ![]() |
Finalement, j'ai presque réussi, avec ce code SQL :
Code sql :
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 |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com