Bonjour,
j'ai quelque petit soucis sur une requête, je cherche depuis ce matin mais je ne trouve pas mon erreur.
Le contexte :
Je fais un tableau en php qui me permet de "zoomer" sur les résultats d'une requête
Voici mon tableau de départ :
---------------------------------------------------
| ENTREPOT | PREPARATEURS | VALEURS | NOMBRE |
---------------------------------------------------
| Sec | Dupont | 8179.26 | 264 |
| Frais | Celine | 7405.50 | 39 |
| Bazar | André | 4071.50 | 215 |
---------------------------------------------------
Il correspond en valeur d'euro au nombre de palette préparé en erreur.
Lorsque l'on clique sur un préparateur, on récupère un 2eme tableau contenant l'ensemble des palettes, leurs valeurs et le nombre d'article. La valeur dans le premier tableau doit donc être égales a la somme des lignes du deuxième tableau.
Pourtant dans certain cas, je ne trouve pas du tout la même chose.
Par exemple pour le préparateur 'céline' de valeur 7405.50 je trouve bien 39 lignes mais de total 1500€ environ.
Voici la requête du premier tableau :
Le CASE me permet de gérer le cas ou un problème sur un article a était indiquer en UVC plutot qu'en carton.
Et le deuxieme tableau :
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 SELECT entrepots.id AS identrepot, entrepots.nom AS entrepot, preparateurs.nom AS preparateur, preparateurs.id AS idpreparateur, CASE lignes.probleme WHEN '1' THEN round(sum((lignes.qte_liv-lignes.qte_recu)*lignes.prix_unitaire),2) WHEN '9' THEN round(sum((lignes.qte_liv-lignes.qte_recu)*lignes.prix_unitaire),2) ELSE round(sum((lignes.qte_liv-lignes.qte_recu)*lignes.prix_unitaire*articles.cdt_carton),2) END AS total, count(*) As nbr FROM Litiges LEFT OUTER JOIN lignes ON lignes.litige=litiges.id LEFT OUTER JOIN preparateurs ON preparateurs.id=lignes.preparateur LEFT OUTER JOIN articles ON lignes.article=articles.id LEFT OUTER JOIN entrepots ON preparateurs.entrepot=entrepots.id WHERE litiges.traitement=1 AND lignes.acceptation=1 AND litiges.etat=4 AND litiges.date_magasin >= '2010-03-03' AND litiges.date_magasin <= '2010-06-22' GROUP BY entrepots.id,entrepots.nom, preparateurs.nom,preparateurs.id ORDER BY total desc
Je ne sais si quelqu'un pourra m'aider, le cas est assez compliqué et je n'ai pas expliqué tout l'ensemble des tables, il vous manquera surement de l'info.
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 SELECT num_bl, num_pl, CASE lignes.probleme WHEN '1' THEN round(sum(lignes.prix_unitaire*(lignes.qte_liv-lignes.qte_recu)),2) WHEN '9' THEN round(sum((lignes.qte_liv-lignes.qte_recu)*lignes.prix_unitaire),2) ELSE round(sum(lignes.prix_unitaire*articles.cdt_carton*(lignes.qte_liv-lignes.qte_recu)),2) END AS total, count(*) AS nbr FROM lignes LEFT OUTER JOIN litiges ON litiges.id=lignes.litige LEFT OUTER JOIN articles ON articles.id=lignes.article WHERE litiges.traitement=1 AND lignes.acceptation=1 AND litiges.etat=4 AND litiges.date_magasin >= '2010-03-03' AND litiges.date_magasin <= '2010-06-22' AND lignes.preparateur=151 GROUP BY lignes.num_bl,lignes.num_pl ORDER BY total desc
Partager