Page 1 sur 1

Requête sql automatique

Posté : 13 janv. 2015, 16:19
par [Compte supprime]
Bonjour,

J'utilise cette requête qui fonctionne :
SELECT lieu,
                    SUM(CASE WHEN YEAR(date_cpa) = 2007 THEN compt_nb ELSE 0 END) AS "compt_2007",
                    SUM(CASE WHEN YEAR(date_cpa) = 2008 THEN compt_nb ELSE 0 END) AS "compt_2008",
                    SUM(CASE WHEN YEAR(date_cpa) = 2009 THEN compt_nb ELSE 0 END) AS "compt_2009",
                    SUM(CASE WHEN YEAR(date_cpa) = 2010 THEN compt_nb ELSE 0 END) AS "compt_2010",
                    SUM(CASE WHEN YEAR(date_cpa) = 2011 THEN compt_nb ELSE 0 END) AS "compt_2011",
                    SUM(CASE WHEN YEAR(date_cpa) = 2012 THEN compt_nb ELSE 0 END) AS "compt_2012",
                    SUM(CASE WHEN YEAR(date_cpa) = 2013 THEN compt_nb ELSE 0 END) AS "compt_2013",
                    SUM(CASE WHEN YEAR(date_cpa) = 2014 THEN compt_nb ELSE 0 END) AS "compt_2014"
                    FROM CP_ANALYSE, LIEUX
                    WHERE CP_ANALYSE.id_lieu=LIEUX.id_lieu
                    GROUP BY LIEUX.id_lieu;
Son problème, depuis janvier, elle n'est plus suffisante, logique ... Je pourrais tout simplement ajouter une ligne mais je souhaitais savoir si il n'y avait pas moyen de rendre tout ça automatique.
Je souhaiterais qu'elle détecte si la table CP_ANALYSE possède une ligne en 2015, on peut le résoudre en SQL ou je dois passer par du PHP ?

Merci ! ;-)

Re: Requête sql automatique

Posté : 13 janv. 2015, 18:38
par tof73
tu peux passer par du php pour construire la chaine de la requete sql avec une boucle de 2007 à date('Y')

Re: Requête sql automatique

Posté : 13 janv. 2015, 21:49
par Mazarini
SELECT lieu,YEAR(date_cpa),sum(compt_nb)
                    FROM CP_ANALYSE, LIEUX
                    WHERE CP_ANALYSE.id_lieu=LIEUX.id_lieu
                    GROUP BY LIEUX.id_lieu,YEAR(date_cpa);
Et gérer les ruptures sur le lieu pour l'affichage.

Re: Requête sql automatique

Posté : 13 janv. 2015, 23:17
par yann18
tu peux construire ta requête dynamiquement en itérant sur les années en partant de 2007 à l'année courante.

$sum='';
$origin = new DateTime('2007-01-13');

$now= new DateTime();//date actuelle
$now->modify( '+1 year' );//+1 an à la date actuelle
$interval = new DateInterval('P1Y');
$daterange = new DatePeriod($origin, $interval ,$now);

foreach($daterange as $date){
$currentYear=$date->format('Y');

$sum.=",SUM(CASE WHEN YEAR(date_cpa) = $currentYear THEN compt_nb ELSE 0 END) AS 'compt_$currentYear'";
}
   $query="SELECT lieu $sum  FROM CP_ANALYSE, LIEUX WHERE CP_ANALYSE.id_li";


Je souhaiterais qu'elle détecte si la table CP_ANALYSE possède une ligne en 2015, on peut le résoudre en SQL ou je dois passer par du PHP ?
si la ligne 2015 n'est pas présente, alors le total pour 2015 sera 0(zéro) ce qui est logique par rapport à ta requête.

Re: Requête sql automatique

Posté : 14 janv. 2015, 09:55
par [Compte supprime]
Bonjour,

Merci pour vos réponses !

Avec ton code yann18, je me demandais si il n'était pas plus simple de lancer une première requête qui me donne le MIN et le MAX des années disponibles dans CP_ANALYSE.
Et ensuite, avec cet intervalle, je gère la boucle pour créer la variable $sum et lancer la 2ème requête ?

Merci.

Re: Requête sql automatique

Posté : 14 janv. 2015, 17:55
par [Compte supprime]
En attendant, j'ai mis le bout de code en pratique.

Il fonctionne, j'ai juste enlevé cette ligne :
$now->modify( '+1 year' );//+1 an à la date actuelle
Sinon, il m'ajoute 2016.

Merci !