{MySQL} différentes conditions sur un champs
Résolu
Mouradif
Messages postés
31
Statut
Membre
-
Mouradif Messages postés 31 Statut Membre -
Mouradif Messages postés 31 Statut Membre -
Bonjour tout le monde,
Avant de venir poser ma question ici j'ai fait un rapide tour de Google et à mon avis la solution n'existe pas. Je ne désespère pas pour autant et compte sur l'efficacité de l'aide communautaire de CCM.
Je viens de coder une application en PHP/MySQL qui gère des comptes d'ouvriers d'une bijouterie (à base d'entrées/sorties).
J'ai une table "opération" qui se présente comme ça :
CREATE TABLE IF NOT EXISTS `operation` (
`code` int(11) PRIMARY KEY AUTO_INCREMENT,
`timestamp` date,
`es` varchar(1),
`designation` varchar(50),
`poids` double,
`ouvrier` int(11),
`or` tinyint(4) DEFAULT '0'
)
le champs `es` vaut "e" si c'est une entrée et "s" si c'est une sortie
le champs `or` vaut 1 si l'opération un transfert d'or
je voudrais afficher sur une même vue (dans une seule requête) la somme des poids où `es` = "e" puis la somme des poids où `es` = "s" puis la somme des poids où es = "e" et or = 1.
Si vous n'avez pas la réponse mais que vous êtes sûr que c'est possible, faites le savoir quand même
Merci d'avance
Avant de venir poser ma question ici j'ai fait un rapide tour de Google et à mon avis la solution n'existe pas. Je ne désespère pas pour autant et compte sur l'efficacité de l'aide communautaire de CCM.
Je viens de coder une application en PHP/MySQL qui gère des comptes d'ouvriers d'une bijouterie (à base d'entrées/sorties).
J'ai une table "opération" qui se présente comme ça :
CREATE TABLE IF NOT EXISTS `operation` (
`code` int(11) PRIMARY KEY AUTO_INCREMENT,
`timestamp` date,
`es` varchar(1),
`designation` varchar(50),
`poids` double,
`ouvrier` int(11),
`or` tinyint(4) DEFAULT '0'
)
le champs `es` vaut "e" si c'est une entrée et "s" si c'est une sortie
le champs `or` vaut 1 si l'opération un transfert d'or
je voudrais afficher sur une même vue (dans une seule requête) la somme des poids où `es` = "e" puis la somme des poids où `es` = "s" puis la somme des poids où es = "e" et or = 1.
Si vous n'avez pas la réponse mais que vous êtes sûr que c'est possible, faites le savoir quand même
Merci d'avance
A voir également:
- {MySQL} différentes conditions sur un champs
- Mysql community server - Télécharger - Bases de données
- Je ne suis pas un robot confidentialité - conditions ✓ - Forum Mail
- Mysql error in file: /engine/classes/mysql.php at line 53 ✓ - Forum Réseaux sociaux
- Excel reporter des données sur une autre feuille avec conditions ✓ - Forum Excel
- Mise en forme conditionnelle excel plusieurs conditions - Guide
5 réponses
Bonjour,
Biensûr que c'est faisable !! ou alors j'ai pas compris la question.
Voici un exemple (que je n'ai pas testé) :
( SELECT es, SUM(POIDS) GROUP BY es )
UNION
( SELECT es, SUM(POIDS) WHERE or = 1 GROUP BY es )
La première partie te renvoie le total des poids E et S (sans se soucier de la donnée 'or').
La seconde partie te renvoie le total des poids E et S qui ont or = 1. Tu pourras y ajouter un WHERE si tu ne veux que les E...
Pour info, dans ton ordre de création de table :`or` tinyint(4) DEFAULT '0'
Si tu es consciencieux, tu ne devrais pas mettre de guillemets autour du 0, car c'est un entier.
(même si je sais, ca ne change rien, et ca fonctionne)
En espèrant t'avoir aidé;
Bonne journée !
Biensûr que c'est faisable !! ou alors j'ai pas compris la question.
Voici un exemple (que je n'ai pas testé) :
( SELECT es, SUM(POIDS) GROUP BY es )
UNION
( SELECT es, SUM(POIDS) WHERE or = 1 GROUP BY es )
La première partie te renvoie le total des poids E et S (sans se soucier de la donnée 'or').
La seconde partie te renvoie le total des poids E et S qui ont or = 1. Tu pourras y ajouter un WHERE si tu ne veux que les E...
Pour info, dans ton ordre de création de table :`or` tinyint(4) DEFAULT '0'
Si tu es consciencieux, tu ne devrais pas mettre de guillemets autour du 0, car c'est un entier.
(même si je sais, ca ne change rien, et ca fonctionne)
En espèrant t'avoir aidé;
Bonne journée !
Re ;
Je pense que tu pourrais y arriver de cette manière :
(j'ai pas testé le code)
SELECT O1.OUVRIER, SOMMES_IN.SOMME, SOMMES_OUT.SOMME, SOMMES_OR.SOMME
FROM OPERATION O1,
(SELECT O2.OUVRIER, SUM(poids) AS SOMME FROM OPERATION O2 WHERE O2.OR = 1 GROUP BY O2.OUVRIER) SOMMES_OR,
(SELECT O3.OUVRIER, SUM(poids) AS SOMME FROM OPERATION O3 WHERE O3.es = 'e' GROUP BY O3.OUVRIER) SOMMES_IN,
(SELECT O4.OUVRIER, SUM(poids) AS SOMME FROM OPERATION O4 WHERE O4.es = 's' GROUP BY O4.OUVRIER) SOMMES_OUT
WHERE
O1.OUVRIER=SOMMES_OR.OUVRIER AND
O1.OUVRIER=SOMMES_IN.OUVRIER AND
O1.OUVRIER=SOMMES_OUT.OUVRIER;
Je pense que tu pourrais y arriver de cette manière :
(j'ai pas testé le code)
SELECT O1.OUVRIER, SOMMES_IN.SOMME, SOMMES_OUT.SOMME, SOMMES_OR.SOMME
FROM OPERATION O1,
(SELECT O2.OUVRIER, SUM(poids) AS SOMME FROM OPERATION O2 WHERE O2.OR = 1 GROUP BY O2.OUVRIER) SOMMES_OR,
(SELECT O3.OUVRIER, SUM(poids) AS SOMME FROM OPERATION O3 WHERE O3.es = 'e' GROUP BY O3.OUVRIER) SOMMES_IN,
(SELECT O4.OUVRIER, SUM(poids) AS SOMME FROM OPERATION O4 WHERE O4.es = 's' GROUP BY O4.OUVRIER) SOMMES_OUT
WHERE
O1.OUVRIER=SOMMES_OR.OUVRIER AND
O1.OUVRIER=SOMMES_IN.OUVRIER AND
O1.OUVRIER=SOMMES_OUT.OUVRIER;
Wha !
Merci infiniment, ça marche. Pas exactement comme je l'avais imaginé mais d'avoir ces 3 données sur un même résultat de requête c'est déjà bien.
En fait dans mon modèle relationnel, une opération appartient à un ouvrier (d'où le champs `ouvrier` qui est une clé étrangère).
J'en demande peut-être un peu trop mais dans l'idéal j'aimerais obtenir avec un regroupement par `ouvrier` ceci :
En gros, dans 3 colones différentes, un SUM avec une condition 1, un SUM avec une condition B et un SUM avec une condition C.
Si quelqu'un a une idée ce serait vraiment cool
Merci infiniment, ça marche. Pas exactement comme je l'avais imaginé mais d'avoir ces 3 données sur un même résultat de requête c'est déjà bien.
En fait dans mon modèle relationnel, une opération appartient à un ouvrier (d'où le champs `ouvrier` qui est une clé étrangère).
J'en demande peut-être un peu trop mais dans l'idéal j'aimerais obtenir avec un regroupement par `ouvrier` ceci :
______________________________________________ |Ouvrier | SUM entrées | SUM sorties | SUM or | _________|_____________|_____________|________| | 74 | 5610 | 5420 | 384 | _________|_____________|_____________|________| | 12 | 1780 | 1450 | 860 | _________|_____________|_____________|________| | 19 | 4320 | 3897 | 2786 | _________|_____________|_____________|________| | 24 | 940 | 935 | 23 | _________|_____________|_____________|________|
En gros, dans 3 colones différentes, un SUM avec une condition 1, un SUM avec une condition B et un SUM avec une condition C.
Si quelqu'un a une idée ce serait vraiment cool
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question