Faire apparaitre la colonne dans mon tableau même si sum(montant) est null

Résolu/Fermé
botitine - 27 avril 2020 à 16:49
 botitine - 28 avril 2020 à 14:54
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

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
A voir également:

11 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 avril 2020 à 21:51
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

1
Super ça marche !!! c'était du au GROUP BY et l'ORDER à ce que je vois !!
Il ne me reste plus qu'a ajouter mes conditions.
Un grand merci a toi
0
Ca ne marche pas... dès que je mets mes conditions les mois vident disparaissent...
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > botitine
28 avril 2020 à 08:18
peux-tu montrer la requête avec les conditions?
0
botitine > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
28 avril 2020 à 09:13
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
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > botitine
28 avril 2020 à 09:35
je pense qu'il suffit de déplacer les conditions dans les clauses ON, en fonction des tables dans lesquelles se trouvent les champs.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
28 avril 2020 à 10:15
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

1
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 avril 2020 à 18:14
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


0
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 |
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 avril 2020 à 18:53
J'ai déplacé ta question dans le forum MySQL
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 avril 2020 à 19:37
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

0
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 |
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 avril 2020 à 20:31
As-tu tester ta requête directement dans ta base de données (via phpMyAdmin) ?
Qu'est-ce qu'elle t'affiche ?

peux-tu nous fournir un dump de ta table ?
0
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
)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
27 avril 2020 à 21:43
Et des données de test seraient les bienvenus également...
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
27 avril 2020 à 22:30
bonjour, comment fais-tu ces boucles?
0
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;
0
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
0