Page 1 sur 1

probleme avec requete imbriquees en sql

Posté : 19 oct. 2006, 20:27
par bouboute_24
Bonjour!

J’ai un petit probleme que j’essais de resoudre depuis quelques jours.

J’ai une table qui contient toutes les activites pour un departement de qualite, a savoir pour chaque piece fabriquee qu’on examine, les defauts qui y sont associees: donc la structure de ma table Table_qualite est comme suit:
PieceID defaut_ID Ligne_Production Piece_caracterisque1 Piece_carac2 scan_date
Considerant que pour une piece on peut avoir plus de un defaut. S’il n’y a pas de defaut on met un code_defaut=GOOD’. S’il y a au moins un defaut dans la piece, elle est rejetee. Donc dans ma table j’ai un enregistrement pour chanque defaut trouve sur une piece
Je dois en fait calculer le pourcentage de defaut par ligne de production journalier qui est egal au (nombre de pieces rejectees/ligne de production) divisee par le (nombres de pieces dans l’echantillon qu’ on a consideree).

J’ai fait une premiere requete (samples_units) qui me donne regroupe les donnees de ma Table_qualite par piece:
SELECT Table_qualite.PieceID, Table_qualite.scan_date, Table_qualite.ligne_production
FROM Table_qualite
GROUP BY Table_qualite.PieceID, Table_qualite.scan_date, Table_qualite.ligne_production;

J’ai une autre requete (Nb_pieces_sample) qui me me donne le nombre de pieces constituant l’echantillon pour chaque ligne de production. Le code est le suivant:

SELECT Count(samples_units.PieceID) AS Samples, samples_units.ligne_production, samples_units.scan_date
FROM samples_units
GROUP BY samples_units.ligne_production, samples_units.scan_date;

D’autre part, dans une 3e requete (samples_piece_reject), je calcule le nombre de pieces par ligne de production qui ont ete rejetee. Donc c-a-d dont le code de defaut est <> {GOOD}.
Encore une fois, j’ai une rpremiere requete qui me donne la liste de pieces rejetee:

SELECT DISTINCT Table_qualite.PieceID, Table_qualite.scan_date, Table_qualite.ligne_production
FROM Table_qualite
WHERE Table_qualite.PieceID not like 'NODEF'
GROUP BY Table_qualite.PieceID, Table_qualite.ligne_production, Table_qualite.scan_date;

Ensuite j’obtiens le nombre de pieces rejetees par ligne avec le code suivant (requete: Nb_piece_reject_ligne):

SELECT count(samples_piece_reject.PieceID) AS Rejects, [samples_piece_reject].scan_date, [samples_piece_reject.ligne].production
FROM samples_piece_reject
GROUP BY [samples_piece_reject].ligne, [samples_piece_reject].scan_date;
Je sais: j’aurais pu obtenir le meme resultat juste avec 2 requetes, mais je suis vraiment pas forte avec les requtes imbriquees.

Donc finalement, pour obtenir le pourcentage de defaut par ligne de production [(nombre de pieces rejectees)/ nombres de pieces dans l’echantillon], j’ai une requete (Pourcentage) dans laquelle je divise chaque ligne de ma requete (Nb_piece_reject_ligne) par la ligne correspondante de ma requete (Nb_pieces_sample).

Le probleme c’est que ma requte (Nb_piece_reject_ligne) ne me donne aucun enregistrement pour les ligne de productions dont toutes les pieces sont bonnes. Ce qui fait que ma requete (Pourcentage), ne m’affiche par les lignes de production sans pieces defectives.

Donc j’essai de creer un requete quand je calcule le nombre de pieces rejetees par ligne de production, qu’elle m’affiche 0 pour les lignes donc toutes les pieces sont bonnes.

Quelqu’un aurait un idee comment resoudre ce problem?

Merci beaucoup d’avance

Posté : 20 oct. 2006, 10:49
par Vikchill
Salut bouboute,

je sais pas si ton post va attirer beaucoup de monde, il est assez difficile à lire et à comprendre. Je crois que tu ferais bien de l'éditer pour mettre quelques balises de code.

En dehors de ça, j'arrive pas toujours à te suivre:
ma table Table_qualite est comme suit:
PieceID defaut_ID Ligne_Production Piece_caracterisque1 Piece_carac2 scan_date
Considerant que pour une piece on peut avoir plus de un defaut. S’il n’y a pas de defaut on met un code_defaut=GOOD’.
Ce code_defaut, ça aurait été bien de savoir d'om ça sort. D'une manière générale, connaître toutes les tables impliquées dans ton problème et leur dépendances est une aide non négligeable.


J’ai fait une premiere requete (samples_units) qui me donne regroupe les donnees de ma Table_qualite par piece:

Code : Tout sélectionner

SELECT Table_qualite.PieceID, Table_qualite.scan_date, Table_qualite.ligne_production FROM Table_qualite GROUP BY Table_qualite.PieceID, Table_qualite.scan_date, Table_qualite.ligne_production;
Cette requete te sers à quoi? Ou plutôt, à quoi penses-tu qu'elle te sert? En général on fait un GROUPE BY pour avoir un ou des agrégats (comme le SUM), là tu aurait peut-être plutôt du faire un SELECT DISTINCT. Tu dis que tu regoupes les données par pièce, j'en suis pas convaincu.

J’ai une autre requete (Nb_pieces_sample) qui me me donne le nombre de pieces constituant l’echantillon pour chaque ligne de production. Le code est le suivant:

Code : Tout sélectionner

SELECT Count(samples_units.PieceID) AS Samples, samples_units.ligne_production, samples_units.scan_date FROM samples_units GROUP BY samples_units.ligne_production, samples_units.scan_date;
Juste pour préciser: ça te donne le nombre de pièce par ligne de production et par date.
D’autre part, dans une 3e requete (samples_piece_reject), je calcule le nombre de pieces par ligne de production qui ont ete rejetee. Donc c-a-d dont le code de defaut est <> {GOOD}.
Encore une fois, j’ai une rpremiere requete qui me donne la liste de pieces rejetee:

Code : Tout sélectionner

SELECT DISTINCT Table_qualite.PieceID, Table_qualite.scan_date, Table_qualite.ligne_production FROM Table_qualite WHERE Table_qualite.PieceID not like 'NODEF' GROUP BY Table_qualite.PieceID, Table_qualite.ligne_production, Table_qualite.scan_date;
Encore une fois, je suis perdu: tu dis que tu testes le code défaut <> 'GOOD', mais où donc? Et, encore une fois, ton groupe se fait aussi par date.
Ensuite j’obtiens le nombre de pieces rejetees par ligne avec le code suivant (requete: Nb_piece_reject_ligne):

Code : Tout sélectionner

SELECT count(samples_piece_reject.PieceID) AS Rejects, [samples_piece_reject].scan_date, [samples_piece_reject.ligne].production FROM samples_piece_reject GROUP BY [samples_piece_reject].ligne, [samples_piece_reject].scan_date;
L'erreur qui saute au yeux, c'est ta ligne de production. Dans la requete samples_piece_reject, le champs s'appelle ligne_production, ici dans le SELECT tu as [samples_piece_reject.ligne].production et dans le GROUP BY tu as [samples_piece_reject].ligne, ta base de données doit être aussi paumée que moi :p
Quelqu’un aurait un idee comment resoudre ce problem?
Je crois qu'il faudrait reprendre tout ça en fait...