Bonjour à tous et à toutes,
J'ai essayé de résoudre mes questions sur des requêtes de mises à jour.
Pouvez-vous me dire si cela peut fonctionner.
Merci pour vos conseils.
Bonjour à tous et à toutes,
J'ai essayé de résoudre mes questions sur des requêtes de mises à jour.
Pouvez-vous me dire si cela peut fonctionner.
Merci pour vos conseils.
Peux-tu donner un exemple du résultat que tu veux obtenir ?
Voici le résultat que tu obtiens actuellement:
Je ne pense pas que ce soit ce que tu veux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 MATERIAUX no_mat code_mat 1 A 2 B 3 C ENTREPOTS (avant MAJ) no_ent no_mat 1 1 1 2 2 1 2 2 2 3 ENTREPOTS (aprest MAJ) no_ent no_mat memo 1 1 5 1 2 5 2 1 5 2 2 5 2 3 5
Bonjour,
je vois que vous avez avancé depuis cette discussion là mais pourquoi écrivez-vous dans votre document word et pas sur le forum ?
Je cherche à obtenir que la colonne memo de type varchar2(65), contienne le nombre d'entrepôts par matériaux .
Envoyé par plaineR
Donc vous voulez par exemple que le champ mémo de la 1ere ligne, qui concerne le matériau 1 dans l'entrepot 1 contienne le chiffre 2 puisqu'il y a 2 entrepots qui contiennent du matériau 1 ?Envoyé par dauphin34000
Et que la dernière ligne, qui concerne le matériau 3 dans l'entrepot 2 contienne le chiffre 1 puisque l'entrepot 2 est le seul à possèder du matériau 3 ?
Moi j'aurai mis cette information dans la table matériau plutôt... Car l'information va se répeter pour chaque ligne du même matériau pour des entrepots différents.
Cela devrait mettre dans la colonne memo le nombre de stages et la matière
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 Avec un autre exemple : J'ai une table stages elle contient : no_stage number(38) code_stage varchar2(6) memo varchar2(65) mat_no_matiere number(38) et une table matieres elle contient : no_matiere number(38) code_mat varchar2(3) libel_mat varchar2(240) Les questions : 1 - Je dois valoriser la colonne memo de la table "stages", avec le nombre de stages de la matière. 2 - Je dois améliorer la requête précédente : En rajoutant le code matière. Avec la fonction concat Pour la question 1 si on fait : update stages set memo=(select count(no_stage) from matieres m, stages st where m.no_matiere=st.mat_no_matiere); cela fonctionne mais la colonne memo contient le même chiffre pour tous, je pense que ce n'est pas normal ? Pour la question 2 si on fait : update stages set memo=(select concat(count(st.no_stage),m.code_mat) from matieres m, stages st where m.no_matiere=st.mat_no_matiere); Oracle m'indique : ORA-00937: la fonction de groupe ne porte pas sur un groupe simple
1. Tu ne fais l'update d'une seule colonne tu en mets 2 dans ton select
2. Quand tu utilises une fonction d'aggrégation, tu es obligé de faire un group by sur les colonnes qui ne sont pas "aggréguées"
ex :
3. Comme tu as un = ton select doit ne ramener qu'une seule ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select col1, count(*) from matable group by col1;
Bref, il y a encore du travail pour que ta requête fonctionne.
=> Commence par écrire le select tel que tu veux le résultat.
Enfin es-tu sûr que ta colonne memo est dans la table stages, il m'aurait paru plus logique qu'elle soit dans la table matières.
On ne fait pas de débogage sur le forum... je pense que tu as suffisamment d'élément maintenant... merci
Je vais essayer, j'ai vérifié la colonne memo se trouve dans la table stages
Envoyé par plaineR
C'est bien le nombre de stages par matière que tu veux ? et non le nombre de matières par stage ?
Si c'est le nombre de stages par matière, ton modèle de données est assez moyen, car il va y avoir redondance de l'information
Je cherche à trouver combien de stages existent par matières
exemple : 3 stages "bureautique", 5 stages "français"
Je n'y arrive toujours pas, je suis un "idiot"
Envoyé par plaineR
En admettant que tu aies les données suivantes :
Pour savoir combien de stages il y a pour la matière 1, tu écrirais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 NO_STAGE CODE_S MAT_NO_MATIERE -------- ------ -------------- 1 A 1 2 B 1 3 C 1 4 D 2 5 E 2
Maintenant ce que tu veux savoir c'est combien il y a de stages pour la matière de la ligne que tu es entrain de mettre à jour, c'est donc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select count(*) from stages where MAT_NO_MATIERE = 1;
As-tu compris le principe ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 update stages s1 set memo = (select count (*) from stages s2 where s2.mat_no_matiere = s1.mat_no_matiere);
Oui, avec vous j'ai bien compris, le principe, mais comment faire pour éviter de faire un where =mat_no_matiere=1, la requête ne peut pas compter le nombre des matieres par stages automatiquement, c'est-à-dire compter le nombre des matieres (francais, histoire etc) et afficher 2 stages francais, 3 stages histoires.
Merci pour votre aide "professeur".
Envoyé par plaineR
Regarde l'update que je t'ai donné, c'est ce qu'il fait. J'ai remplacé le "=1" par "= la matière de la ligne que je vais updater".
Ca ressemble vachement à un exercice de cours...
ça ressemble surtout à quelqu'un qu'à pas envie de se fouler
Non, quelqu'un qui débute et qui trouve des gens sympas et compétents pour apprendre.
Envoyé par Fred_D
OK, mais essaye d'avoir un peu plus d'initialive, sur le site il y a des tutoriels pour apprendre le SQL et la modélisation, commence déjà par ça.
Après on se fera un plaisir de combler les manques de ces tutoriels ou t'expliquer les points qui tu ne saisis pas
Faire ton travail, ce n'est pas t'aider à apprendre
Je suis d'accord avec vous, je travaille les tutos du site je trouve que votre site est formidable, mais lorsque l'on apprend seul, des fois on ne comprend pas tout et surtout des fois on peut bloquer. Si j'avais votre savoir je pourrais dormir tranquille, mais je suis un véritable débutant. Donc je vous remercie pour votre compréhension Monsieur.
Envoyé par Fred_D
J'ai reproduit l'exemple des stages :
Ce qui nous donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 CREATE TABLE STAGE (no_stage number(38), code_stage varchar2(6), memo varchar2(65), mat_no_matiere number(38)); CREATE TABLE MATIERE (no_matiere number(38), code_mat varchar2(3), libel_mat varchar2(240)); INSERT INTO MATIERE VALUES (1,'FR1','Français niv1'); INSERT INTO MATIERE VALUES (2,'AN1','Anglais niv1'); INSERT INTO MATIERE VALUES (3,'AL1','Allemand niv1'); INSERT INTO MATIERE VALUES (4,'FR2','Francais niv2'); INSERT INTO MATIERE VALUES (5,'AN2','Anglais niv2'); INSERT INTO MATIERE VALUES (6,'AL2','Allemand niv2'); INSERT INTO MATIERE VALUES (7,'MA1','Mathematiques niv1'); INSERT INTO MATIERE VALUES (8,'MA2','Mathematiques niv2'); INSERT INTO MATIERE VALUES (9,'MA3','Mathematiques niv3'); INSERT INTO STAGE VALUES (1,'STL1','',1); INSERT INTO STAGE VALUES (2,'STL2','',1); INSERT INTO STAGE VALUES (3,'STL3','',1); INSERT INTO STAGE VALUES (4,'STL4','',2); INSERT INTO STAGE VALUES (5,'STL5','',2); INSERT INTO STAGE VALUES (6,'STL6','',3); INSERT INTO STAGE VALUES (7,'STL7','',3); INSERT INTO STAGE VALUES (8,'STL8','',4); INSERT INTO STAGE VALUES (9,'STL9','',4); INSERT INTO STAGE VALUES (10,'STL10','',5); INSERT INTO STAGE VALUES (11,'STL10','',6); INSERT INTO STAGE VALUES (12,'STL12','',7); INSERT INTO STAGE VALUES (13,'STL13','',8); INSERT INTO STAGE VALUES (14,'STL14','',9);
Et ce que vous voulez obtenir c'est ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 select * from stage NO_STAGE|CODE_STAGE|MEMO|MAT_NO_MATIERE 1|STL1||1 2|STL2||1 3|STL3||1 4|STL4||2 5|STL5||2 6|STL6||3 7|STL7||3 8|STL8||4 9|STL9||4 10|STL10||5 11|STL10||6 12|STL12||7 13|STL13||8 14|STL14||9
C'est à dire que les stages indiquent dans leur mémo le nombre de stage proposant la même matière ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 NO_STAGE|CODE_STAGE|MEMO|MAT_NO_MATIERE 1|STL1|Nombre de stages proposant cette matieres : 3|1 2|STL2|Nombre de stages proposant cette matieres : 3|1 3|STL3|Nombre de stages proposant cette matieres : 3|1 4|STL4|Nombre de stages proposant cette matieres : 2|2 5|STL5|Nombre de stages proposant cette matieres : 2|2 6|STL6|Nombre de stages proposant cette matieres : 2|3 7|STL7|Nombre de stages proposant cette matieres : 2|3 8|STL8|Nombre de stages proposant cette matieres : 2|4 9|STL9|Nombre de stages proposant cette matieres : 2|4 10|STL10|Nombre de stages proposant cette matieres : 1|5 11|STL10|Nombre de stages proposant cette matieres : 1|6 12|STL12|Nombre de stages proposant cette matieres : 1|7 13|STL13|Nombre de stages proposant cette matieres : 1|8 14|STL14|Nombre de stages proposant cette matieres : 1|9
On remarquera que pour cet exemple je n'ai considéré que des stages mono-matière, c'est normal où il y en a des multi-matières ?
EDIT :
je viens de tester sur des stages multi matières ça marche aussi.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager