Requête SQL
Résolu
Nico0044
-
croy Messages postés 453 Date d'inscription Statut Membre Dernière intervention -
croy Messages postés 453 Date d'inscription Statut Membre Dernière intervention -
Bonjour à toutes et tous.
J'ai un soucis au niveau d'une requête qui n'affiche pas ce que je souhaite.
Voici ma requête:
Select max(MOROUT.N°poste), MOROUT.N°de fabrication,MOROUT.Nomopération
FROM MOROUT
GROUP BY MOROUT.N°de fabrication
Cette requête ne me donne pas ce que souhaite car ce que je veux c'est avoir le numéro maximum du N°poste groupé par N°de fabrication et mettre l'opération qui correspond.
Mais le problème c'est qu'il m'affiche les N°poste groupé par Ordre de fabrication et par opérations ce que je ne veux pas.
Exemple de ce que j'ai:
N°de fabrication:1 N°poste:5 Nom opération: arrière
N°de fabrication:1 N°poste: 10 Nom opération: avant
N°de fabrication:1 N°poste: 20 Nom opération: droite
N°de fabrication:2 N°poste: 15 Nom opération: bas
N°de fabrication:2 N°poste: 25 Nom opération: haut
Exemple de ce que je veux:
N° de fabrication:1 N°poste(le max): 20 ( car 20>5 et 10) Nom opération: droite
N°de fabrication:2 N°poste: 25 Nom opération: haut
J'ai un soucis au niveau d'une requête qui n'affiche pas ce que je souhaite.
Voici ma requête:
Select max(MOROUT.N°poste), MOROUT.N°de fabrication,MOROUT.Nomopération
FROM MOROUT
GROUP BY MOROUT.N°de fabrication
Cette requête ne me donne pas ce que souhaite car ce que je veux c'est avoir le numéro maximum du N°poste groupé par N°de fabrication et mettre l'opération qui correspond.
Mais le problème c'est qu'il m'affiche les N°poste groupé par Ordre de fabrication et par opérations ce que je ne veux pas.
Exemple de ce que j'ai:
N°de fabrication:1 N°poste:5 Nom opération: arrière
N°de fabrication:1 N°poste: 10 Nom opération: avant
N°de fabrication:1 N°poste: 20 Nom opération: droite
N°de fabrication:2 N°poste: 15 Nom opération: bas
N°de fabrication:2 N°poste: 25 Nom opération: haut
Exemple de ce que je veux:
N° de fabrication:1 N°poste(le max): 20 ( car 20>5 et 10) Nom opération: droite
N°de fabrication:2 N°poste: 25 Nom opération: haut
A voir également:
- Requête SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
4 réponses
^^
dans ton group by, il faut aussi que tu mettes :
essaye, ca marchera peut être!
^^
dans ton group by, il faut aussi que tu mettes :
MOROUT.Nomopération
essaye, ca marchera peut être!
^^
Trois remarques préliminaires :
1. simplifie ta requête en supprimant les MOROUT. qui ne servent à rien puisque tu ne travailles que sur une table
2. évite les caractères comme '°', 'é'... dans les noms de colonnes sql
3. ton SELECT ne peux pas marcher car il contient des noms de colonnes avec des espaces
Ton pb proprement dit vient de la présence de nomOperation dans la liste des variables sélectées : quelle valeur afficher pour un groupe par numFabrication qui contiendrait plusieurs valeurs de nomOperation ?
Il faut donc retirer nomOperation de cette liste.
1. simplifie ta requête en supprimant les MOROUT. qui ne servent à rien puisque tu ne travailles que sur une table
2. évite les caractères comme '°', 'é'... dans les noms de colonnes sql
3. ton SELECT ne peux pas marcher car il contient des noms de colonnes avec des espaces
SELECT max( numPoste ), numFabrication, nomOperation FROM MOROUT GROUP numFabrication
Ton pb proprement dit vient de la présence de nomOperation dans la liste des variables sélectées : quelle valeur afficher pour un groupe par numFabrication qui contiendrait plusieurs valeurs de nomOperation ?
Il faut donc retirer nomOperation de cette liste.
Merci pour vos réponses: pour le fait que je n'ai pas "group by nom opération" c'est justement la le problème j'aimerais l'enlever du group by mais Microsoft query le rajoute tout seul ce qui me donne une requête fausse.
Croy il me faut la liste des nom d'opérations car ce que je veux c'est savoir la dernière opération réalisée par N° de fabrication et on le sait avec le maximum de N°poste.
Si vous avez une idée ça m'aiderais grandement.
Merci d'avance
Croy il me faut la liste des nom d'opérations car ce que je veux c'est savoir la dernière opération réalisée par N° de fabrication et on le sait avec le maximum de N°poste.
Si vous avez une idée ça m'aiderais grandement.
Merci d'avance
Il faut retirer nomOperation de la liste apès le SELECT.
Si tu as un besoin spécifique, pourrais-tu nous donner un exemple de table de données (10 enregistrements au plus) et ce que tu voudrais obtenir.
Si tu as un besoin spécifique, pourrais-tu nous donner un exemple de table de données (10 enregistrements au plus) et ce que tu voudrais obtenir.
Croy je ne peut pas retirer le nom opération car il faut que cette info soit visible je te met un exemple:
N°de fabrication:1 N°poste:5 Nom opération: arrière
N°de fabrication:1 N°poste: 10 Nom opération: avant
N°de fabrication:1 N°poste: 20 Nom opération: droite
N°de fabrication:2 N°poste: 15 Nom opération: bas
N°de fabrication:2 N°poste: 25 Nom opération: haut
N°de fabrication:3 N°poste: 10 Nom opération: avant
N°de fabrication:3 N°poste: 15 Nom opération: bas
N°de fabrication:4 N°poste: 5 Nom opération: arrière
La base de données me recence toutes les opérations correspondant aux numéros de fabrication. Le numéro de poste correspont à l'avancement de la production.
Ce qu'il me faut c'est 3 colonnes avec le N° de fabrication, le N° de poste et le nom de l'opération mais avec un critère qui est que le numéro de poste sélectionné soit le plus grand pour un numéro de fabrication et qu'il me mette a coté le nom de l'opération correspondant.
C'est à dire pour l'exemple:
N°de fabrication:1 N°poste: 20 Nom opération: droite
N°de fabrication:2 N°poste: 25 Nom opération: haut
N°de fabrication:3 N°poste: 15 Nom opération: bas
N°de fabrication:4 N°poste: 5 Nom opération: arrière
Mais le souci c'est que mon programme ne veut pas que je fasse juste le max(numéro de poste) group by (numéro de fabrication). Il me met à la place (group by (numéro de fabrication; nom opération)
N°de fabrication:1 N°poste:5 Nom opération: arrière
N°de fabrication:1 N°poste: 10 Nom opération: avant
N°de fabrication:1 N°poste: 20 Nom opération: droite
N°de fabrication:2 N°poste: 15 Nom opération: bas
N°de fabrication:2 N°poste: 25 Nom opération: haut
N°de fabrication:3 N°poste: 10 Nom opération: avant
N°de fabrication:3 N°poste: 15 Nom opération: bas
N°de fabrication:4 N°poste: 5 Nom opération: arrière
La base de données me recence toutes les opérations correspondant aux numéros de fabrication. Le numéro de poste correspont à l'avancement de la production.
Ce qu'il me faut c'est 3 colonnes avec le N° de fabrication, le N° de poste et le nom de l'opération mais avec un critère qui est que le numéro de poste sélectionné soit le plus grand pour un numéro de fabrication et qu'il me mette a coté le nom de l'opération correspondant.
C'est à dire pour l'exemple:
N°de fabrication:1 N°poste: 20 Nom opération: droite
N°de fabrication:2 N°poste: 25 Nom opération: haut
N°de fabrication:3 N°poste: 15 Nom opération: bas
N°de fabrication:4 N°poste: 5 Nom opération: arrière
Mais le souci c'est que mon programme ne veut pas que je fasse juste le max(numéro de poste) group by (numéro de fabrication). Il me met à la place (group by (numéro de fabrication; nom opération)
Je te recommande de créer deux tables :
1. tblFabrication : avec numFabrication et numPoste
2. tblPostes : avec numPoste et nomOperation
create table tblPostes (numPoste INT, nomOperation VARCHAR(50));
Dans la table tblPostes, tu n'as qu'une seule fois chaque poste :
15,'bas'
25,'haut'
10,'avant'
5,'arrière'
Dans la table tblFabrication, tu ne répètes pas le nomOperation que tu vas chercher au moment du SELECT par :
Ceci donne le détail des opérations. Pour avoir ce que tu veux :
Ceci est une organisation qui tire parti de l'organisation dite "base de données relationnelle"
1. tblFabrication : avec numFabrication et numPoste
2. tblPostes : avec numPoste et nomOperation
create table tblPostes (numPoste INT, nomOperation VARCHAR(50));
Dans la table tblPostes, tu n'as qu'une seule fois chaque poste :
15,'bas'
25,'haut'
10,'avant'
5,'arrière'
Dans la table tblFabrication, tu ne répètes pas le nomOperation que tu vas chercher au moment du SELECT par :
SELECT F.numFabrication,F.numPoste,P.nomOperation FROM tblFabrication AS F, tblPostes AS P WHERE F.numPoste=P.numPoste;
Ceci donne le détail des opérations. Pour avoir ce que tu veux :
SELECT F.numFabrication,Max( F.numPoste),P.nomOperation FROM tblOperations AS F, tblPostes AS P WHERE F.numPoste=P.numPoste GROUP BY F.numFabrication;
Ceci est une organisation qui tire parti de l'organisation dite "base de données relationnelle"