Bonjour à tous,
Quelques infos pratiques avant de commencer (je ne sais pas si toutes les infos seront utiles)
OS : Windows 7
Interface d'utilisation de MySQL : phpMyAdmin via WAMP
Forme d'utilisation de MySQL : SQL pure (pas d'intégration avec du PHP ou autres)
Niveau en SQL : Novice - J'ai quand même les notions de base
Détails de ce qui me pose question :
Je dispose d'une base de donnée SQL sous cette forme (version très simplifiée, mais qui résume bien ce que je souhaite faire par la suite) : base_test.zip
Mon but était de réorganiser l'information de manière à obtenir ceci :
Il s'agissait donc de réaliser en quelque sorte un tableau croisé (pas dynamique) en SQL.
J'ai réussi à trouver ma requête miracle après quelques recherches :
Ma question :SELECT
`Parcelle`,
COUNT(DISTINCT(IF(year(`Date_travaux`)='2003', `Date_travaux`, 0)))-1 AS "2003",
COUNT(DISTINCT(IF(year(`Date_travaux`)='2004', `Date_travaux`, 0)))-1 AS "2004",
COUNT(DISTINCT(IF(year(`Date_travaux`)='2005', `Date_travaux`, 0)))-1 AS "2005",
COUNT(DISTINCT(IF(year(`Date_travaux`)='2006', `Date_travaux`, 0)))-1 AS "2006",
COUNT(DISTINCT(IF(year(`Date_travaux`)='2007', `Date_travaux`, 0)))-1 AS "2007",
COUNT(DISTINCT(IF(year(`Date_travaux`)='2008', `Date_travaux`, 0)))-1 AS "2008"
FROM `base_test`
GROUP BY `Parcelle`
ORDER BY `Parcelle` ASC;
Pourquoi suis-je obligé de soustraire -1 à chacun de mes COUNT(DISTINCT( CHAMP )) pour obtenir le résultat souhaité ?
En lisant un peu de doc, j'ai lu que la fonction COUNT ne renvoyait pas de résultat nul. Mais j'ai du mal avec cette notion car je ne vois pas pourquoi ça renvoie 1 quand il n'y a rien à compter, 2 quand il n'y a qu'une valeur à compter, 3 quand il n'y a que deux valeurs à compter, etc.
Pour info, voici le résultat si je supprime les -1 à chacun de mes COUNT(DISTINCT( CHAMP )) :
Je vois bien que quelque chose cloche dans ma requête (car je ne pense pas que ce soit normal d'être obligé de soustraire 1 à chaque fois), mais je n'arrive pas à cerner vraiment le problème... Si quelqu'un peut m'apporter ses lumières, ce serait très sympa.
Au passage, en réalisant cet exercice, je me suis bien rendu compte que le SQL n'était pas idéal pour créer des tableaux croisés, mais je suis du genre obstiné quand j'ai une idée en tête. Du coup je ne voulais pas lâcher l'affaire tant que je n'étais pas arrivé à afficher le résultat souhaité.
Partager