Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/01/2011, 15h18   #1
Membre régulier
 
Inscription : mai 2008
Messages : 260
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 260
Points : 89
Points : 89
Par défaut Probleme sur requete avec jour manquant

Bonjour,

Voici ma requete :
Code :
SELECT extract(day FROM date_heure) AS jr,sum(PUISS_ACTIVE_PRODUITE) FROM DATA_10MIN WHERE DATE_HEURE BETWEEN '01/01/2010' AND '02/01/2010' GROUP BY jr
elle me liste pour chaque jour la somme de PUISS_ACTIVE_PRODUITE. Par contre j'aimerais que pour les jours où je n'ai pas de donnée le jour s'affiche avec marqué 0 dans la somme.
Est ce que c'est possible à faire sans passer par une PS?

Merci
calou_33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 15h59   #2
Membre éprouvé
 
Homme
Analyste-développeur
Inscription : mai 2002
Messages : 989
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Analyste-développeur

Informations forums :
Inscription : mai 2002
Messages : 989
Points : 426
Points : 426
Bonjour,

Es-ce que les jours sont enregistrer même si il n' y a pas de donnée vous voulez dire ?

Essayez avec COALESCE :
Code SQL :
1
2
 
SELECT extract(day FROM date_heure) AS jr,COALESCE(sum(PUISS_ACTIVE_PRODUITE) ,0) FROM DATA_10MIN WHERE DATE_HEURE BETWEEN '01/01/2010' AND '02/01/2010' GROUP BY jr

Si il s'agit de cela, oui dans une vue :
Code SQL :
1
2
3
4
5
6
 
CREATE OR ALTER VIEW vw_Somme
(JOUR,
 SOMME)
AS
SELECT extract(day FROM date_heure) AS jr,COALESCE(sum(PUISS_ACTIVE_PRODUITE) ,0) FROM DATA_10MIN WHERE DATE_HEURE BETWEEN '01/01/2010' AND '02/01/2010' GROUP BY jr
__________________
Seul le Savoir est le Pouvoir
freud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 16h24   #3
Membre régulier
 
Inscription : mai 2008
Messages : 260
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 260
Points : 89
Points : 89
Bonjour,

En fait le jour n'existe pas dans la table
par exemple :

DATE PUISS_ACTIVE_PRODUITE
01/01/2010 10
01/01/2010 10
03/01/2010 20

Je voudrais le résultat suivant :

JR somme
1 20
2 0
3 20

Merci
calou_33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 19h17   #4
Membre éprouvé
 
Homme
Analyste-développeur
Inscription : mai 2002
Messages : 989
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Analyste-développeur

Informations forums :
Inscription : mai 2002
Messages : 989
Points : 426
Points : 426
Es-ce que ça peut regler le problème avec ce code ? :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE OR ALTER VIEW V_TEST(
    S1,S2)
AS
 
WITH recursive plage_date AS
(
  SELECT cast('01-01-2010' AS date) AS jour, 0  AS somme FROM rdb$database
  union ALL
  SELECT dateadd(day, 1, jour),somme+0 FROM plage_date
  WHERE jour BETWEEN CAST('01/01/2010' AS date)  AND cast('02/01/2010' AS date)-1
 
)
SELECT extract(day FROM jour),somme FROM plage_date
union ALL
SELECT extract(day FROM date_heure) AS jr,sum(PUISS_ACTIVE_PRODUITE)  FROM DATA_10MIN  GROUP BY jr GROUP BY jr
__________________
Seul le Savoir est le Pouvoir
freud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 09h38   #5
Membre régulier
 
Inscription : mai 2008
Messages : 260
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 260
Points : 89
Points : 89
Je vais pouvoir me débrouiller avec ca.

Merci pour l'aide
calou_33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 10h14   #6
Membre éprouvé
 
Homme
Analyste-développeur
Inscription : mai 2002
Messages : 989
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Analyste-développeur

Informations forums :
Inscription : mai 2002
Messages : 989
Points : 426
Points : 426
Bonjour,

Le code précédent affiche les dates en double, celles oû la somme est >0
Je pense que celui-ci est plus correct :
Code SQL :
1
2
3
4
5
6
7
8
9
10
 
WITH RECURSIVE plage_date AS
(
 SELECT cast('01/01/2010' AS date) AS jour, 0  AS somme FROM rdb$database
  UNION ALL
  SELECT dateadd(day, 1, jour),0 FROM plage_date
  WHERE jour BETWEEN CAST('01/01/2010' AS date)  AND cast('02/01/2010' AS date)-1
)
SELECT Extract(day FROM plage_date.jour),   COALESCE(sum(DATA_10MIN.PUISS_ACTIVE_PRODUITE),0)
FROM DATA_10MIN RIGHT JOIN plage_date ON DATA_10MIN.date_heure=plage_date.jour GROUP BY  plage_date.jour

Il faudra mettre ça dans une PS pour pouvoir paramétrer les dates.
__________________
Seul le Savoir est le Pouvoir
freud est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h34.


 
 
 
 
Partenaires

Hébergement Web