Faire apparaitre la colonne dans mon tableau même si sum(montant) est null
Résolu
botitine
-
botitine -
botitine -
Bonjour à tous,
Je profite de cette période de confinement pour me remettre à coder.
Je suis en train de faire un tableau de frais voici ma requete
Je fais ensuite une boucle avec des <td></td>.
Le soucis est que si j'ai une depense qui n'a pas eu de montant à un mois donné, les colonnes ne décalent ce qui est logique.
J'ai créer une table mois avec la jointure
j'ai fait des IF, des case et coalesce...
Mais ça ne marche toujours pas...
Une âme charitable pourrait-elle m'aider ?
Merci d'avance
Je profite de cette période de confinement pour me remettre à coder.
Je suis en train de faire un tableau de frais voici ma requete
SELECT IFNULL(SUM(montant_cdv),0) AS total, MONTH(date_cdv) AS mois FROM cdv
LEFT JOIN `rcaisse` ON `rcaisse`.`id` = `cdv`.`id_caisse`
LEFT JOIN `rcomptable` ON `rcomptable`.`id` = `rcaisse`.`id_rcompt`
LEFT JOIN `gt_rcomptable` ON `gt_rcomptable`.`id_rcomptable` = `rcomptable`.`id`
LEFT JOIN `rcaisse_tab_cdv` ON `rcaisse_tab_cdv`.`rcompt` = `rcomptable`.`id`
WHERE type = :cdv
AND nom = :secteur
AND entite_cdv = :entite
GROUP BY MONTH(cdv)
ORDER BY MONTH(date) ASC
Je fais ensuite une boucle avec des <td></td>.
Le soucis est que si j'ai une depense qui n'a pas eu de montant à un mois donné, les colonnes ne décalent ce qui est logique.
J'ai créer une table mois avec la jointure
JOIN mois ON MONTH(date_cdv) = mois.id
j'ai fait des IF, des case et coalesce...
Mais ça ne marche toujours pas...
Une âme charitable pourrait-elle m'aider ?
Merci d'avance
Configuration: Windows / Firefox 75.0
11 réponses
-
Petite correction
SELECT IFNULL(SUM(montant_cdv),0) AS total ,seq AS mois FROM ( SELECT 1 AS seq UNION SELECT 2 AS seq UNION SELECT 3 AS seq UNION SELECT 4 AS seq UNION SELECT 5 AS seq UNION SELECT 6 AS seq UNION SELECT 7 AS seq UNION SELECT 8 AS seq UNION SELECT 9 AS seq UNION SELECT 10 AS seq UNION SELECT 11 AS seq UNION SELECT 12 AS seq ) AS SEQ LEFT JOIN cdv C ON SEQ.seq = MONTH(C.date_cdv) GROUP BY seq ORDER BY seq ASC
-
-
- bien sur ^^
SELECT IFNULL(SUM(montant_cdv),0) AS total, seq AS mois FROM ( SELECT 1 AS seq UNION SELECT 2 AS seq UNION SELECT 3 AS seq UNION SELECT 4 AS seq UNION SELECT 5 AS seq UNION SELECT 6 AS seq UNION SELECT 7 AS seq UNION SELECT 8 AS seq UNION SELECT 9 AS seq UNION SELECT 10 AS seq UNION SELECT 11 AS seq UNION SELECT 12 AS seq ) AS SEQ LEFT JOIN cdv C ON SEQ.seq = MONTH(C.date_cdv) LEFT JOIN `rcaisse` ON `rcaisse`.`id` = C.`id_caisse` LEFT JOIN `rcomptable` ON `rcomptable`.`id` = `rcaisse`.`id_rcompt` LEFT JOIN `gt_rcomptable` ON `gt_rcomptable`.`id_rcomptable` = `rcomptable`.`id` LEFT JOIN `rcaisse_tab_cdv` ON `rcaisse_tab_cdv`.`rcompt` = `rcomptable`.`id` WHERE type_cdv = :cdv AND nom = :secteur AND entite_cdv = :entite GROUP BY seq ORDER BY seq ASC
-
-
Bonjour,
et comme ça ?SELECT SAQ.seq ,T.total FROM ( SELECT 1 AS seq UNION SELECT 2 AS seq UNION SELECT 3 AS seq UNION SELECT 4 AS seq UNION SELECT 5 AS seq UNION SELECT 6 AS seq UNION SELECT 7 AS seq UNION SELECT 8 AS seq UNION SELECT 9 AS seq UNION SELECT 10 AS seq UNION SELECT 11 AS seq UNION SELECT 12 AS seq ) AS SEQ LEFT JOIN ( SELECT IFNULL(SUM(montant_cdv),0) AS total, MONTH(C.date_cdv) AS mois FROM cdv C LEFT JOIN `rcaisse` ON `rcaisse`.`id` = C.`id_caisse` LEFT JOIN `rcomptable` ON `rcomptable`.`id` = `rcaisse`.`id_rcompt` LEFT JOIN `gt_rcomptable` ON `gt_rcomptable`.`id_rcomptable` = `rcomptable`.`id` LEFT JOIN `rcaisse_tab_cdv` ON `rcaisse_tab_cdv`.`rcompt` = `rcomptable`.`id` WHERE type_cdv = :cdv AND nom = :secteur AND entite_cdv = :entite GROUP BY MONTH(C.date_cdv) ) T ON SEQ.seq = T.mois ORDER BY seq ASC
-
Bonjour,
Tu bosses sur sqlServer tu es sûr ?
pas plutôt sur mysql ?
Ensuite, ton souci se situe au niveau de la requête ou bien au niveau de ton code ( php ? )
Qu'obtiens tu ?
Que veux tu obtenir ?
NB: A l'avenir, merci de préciser le LANGAGE dans les balises de code afin d'avoir la coloration syntaxique et l'indentation.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
-
Bonjour,
Merci de ta réponse.
Oui c'est du mysql. je n'ai pas trouvé le forum adéquat et je n'ai pas voulu mettre dans "php"...
Désolé pour mon erreur.
J’obtiens un tableau dans ce style :
| janvier | Février | Mars |
| 12 | 23 |
Si Janvier est vide, Février se met sous Janvier
J'aimerai avoir
| janvier | Février | Mars |
| 0 | 12 | 23 | -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
Essaye un truc du genre
SELECT IFNULL(SUM(montant_cdv),0) AS total ,MONTH(date_cdv) AS mois FROM ( SELECT 1 AS seq UNION SELECT 2 AS seq UNION SELECT 3 AS seq UNION SELECT 4 AS seq UNION SELECT 5 AS seq UNION SELECT 6 AS seq UNION SELECT 7 AS seq UNION SELECT 8 AS seq UNION SELECT 9 AS seq UNION SELECT 10 AS seq UNION SELECT 11 AS seq UNION SELECT 12 AS seq ) AS SEQ LEFT JOIN cdv C ON SEQ.seq = MONTH(C.date_cdv) LEFT JOIN `rcaisse` ON `rcaisse`.`id` = C.`id_caisse` LEFT JOIN `rcomptable` ON `rcomptable`.`id` = `rcaisse`.`id_rcompt` LEFT JOIN `gt_rcomptable` ON `gt_rcomptable`.`id_rcomptable` = `rcomptable`.`id` LEFT JOIN `rcaisse_tab_cdv` ON `rcaisse_tab_cdv`.`rcompt` = `rcomptable`.`id` WHERE type = :cdv AND nom = :secteur AND entite_cdv = :entite GROUP BY MONTH(C.date_cdv) ORDER BY MONTH(C.date_cdv) ASC
-
Merci pour ta réponse ;).
J'ai malheureusement déjà essayer la sous requête fixe avec les union mais ça ne marche pas :'(
J'ai le même résultat
| janvier | Février | Mars |
| 12 | 23 | -
Oui j'ai testé sur via phpMyAdmin
le resultat :
total mois
22.44 3
0.79 4
il n'y a pas le mois 2 à 0
ma table
-- Structure de la table `cdv`
CREATE TABLE `cdv` ( `id_cdv` int(11) NOT NULL, `type_cdv` int(11) NOT NULL, `date_cdv` date NOT NULL, `montant_cdv` decimal(20,2) NOT NULL, `id_caisse` int(11) NOT NULL, `entite_cdv` int(11) NOT NULL )
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, comment fais-tu ces boucles? -
Bonsoir,
avec du PHP un foreach : j'appelle le total selon mes conditions
// Boucle des montants $gt =""; foreach ($nbr as $totalgt) { $gt .= "<td>".$totalgt['total']."</td>"; } return $gt; -
Super merci Jordane45 cette fois c'est la bonne !!
Je n'aurais jamais trouvé tout seul...
Je vais me replonger dans les requêtes.
Encore merci.
PS je passe en résolu ce soir n' étant pas sur le même PC qu'hier je n'ai pas résolu