Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 28/04/2008, 17h17   #1
Invité de passage
 
Inscription : avril 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 11
Points : 2
Points : 2
Par défaut Problème de group by

Bonsoir,

je bosse actuellement sur des solutions de reporting et on m'a demandé de tester BIRT avec une base oracle existante (9i)

Pour faire mon reporting je n'ai besoin que d'attaquer 2 ou 3 tables.
l'une d'elle s'appelle agg_jour et est composée de pleins de champs dont 24 particulièrement qui contiennent pleins de valeurs utiles, cependant pour faire un graphe utile il m'a fallu faire un pivot de cette table. (j'utilise aussi une table abscisse qui contient les informations intermediaires et enfin une table requete qui contient l'intitulé de la requete) (en gros requete - abscisse - agg_jour pour ce qui est des jointures)

voilà j'aimerais faire une requete qui me permet de faire apparaitre les id_absc qui sont clé primaire de la table abscisse et clé etrangere de la table agg_jour, cependant, j'ai la même abscisse qui apparait 24x (une par heure) et je voudrais faire en sorte que celle ci n'apparaisse qu'une fois.
la requete que j'utilise pour le pivot est celle-ci (elle va etre assez longue désolé)

select distinct abscisses.NUM8AB,abscisses.ID_ABSC,t2.r heure,
decode(t2.r,
1,h00,
2,h01,
3,h02,
4,h03,
5,h04,
6,h05,
7,h06,
8,h07,
9,h08,
10,h09,
11,h10,
12,h11,
13,h12,
14,h13,
15,h14,
16,h15,
17,h16,
18,h17,
19,h18,
20,h19,
21,h20,
22,h21,
23,h22,
24,h23) Nombre_appel
from requetes inner join abscisses on requetes.ID_REQ = abscisses.ID_REQ inner join agg_jour on abscisses.ID_ABSC = agg_jour.ID_ABSC,(select
rownum r
from
all_objects
where
rownum<=24) t2
where requetes.ID_REQ = 2 and abscisses.NUM8AB = '0811702702' and agg_jour.JOUR = '08/04/08'

Quand j'essaye de faire un group by sous oracle par le id_absc je me fais jeter, normal. Maintenant en essayant de faire le group by par heure, ça ne passe pas, ou du moins j'ai pas vraiment d'idée avec cette requete (qui soit dit en passant, me semble pas forcément adaptée pour ce que je veux faire)
Ah oui, ce que je veux faire, c'est une requete avec en sortie 2 colonnes en gros, ou du moins içi, avec 7 colonnes (une colonne par abscisse)

voilà j'espere avoir été clair dans mes explications.

en vous remerciant par avance (je bloque là )
flammer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 18h38   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
SELECT abscisses.NUM8AB,abscisses.ID_ABSC,t2.r heure, 
sum(decode(t2.r,
1,h00,
2,h01,
3,h02,
4,h03,
5,h04,
6,h05,
7,h06,
8,h07,
9,h08,
10,h09,
11,h10,
12,h11,
13,h12,
14,h13,
15,h14,
16,h15,
17,h16,
18,h17,
19,h18,
20,h19,
21,h20,
22,h21,
23,h22,
24,h23)) Nombre_appel
FROM requetes INNER JOIN abscisses ON requetes.ID_REQ = abscisses.ID_REQ INNER JOIN agg_jour ON abscisses.ID_ABSC = agg_jour.ID_ABSC,(SELECT
rownum r
FROM
all_objects
WHERE
rownum<=24) t2
WHERE requetes.ID_REQ = 2 AND abscisses.NUM8AB = '0811702702' AND agg_jour.JOUR = '08/04/08'
GROUP BY abscisses.NUM8AB,abscisses.ID_ABSC,t2.r
note all_objects c'est pas terrible, je préfèrerais une table T2, style

CREATE TABLE T2 AS select rownum r from all_objects where rownum<=24;

j'espère que ça te mets sur la voie. Dans Oracle 10g on peut utiliser MODEL et dans 11g on peut utiliser PIVOT / UNPIVOT
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 09h11   #3
Invité de passage
 
Inscription : avril 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 11
Points : 2
Points : 2
merci pour la piste je vais regarder ça.

on m'a dit que c'etait une base 9i, enfin entre ce qu'on m'a dit et la réalité...

merci en tout cas
flammer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h01.


 
 
 
 
Partenaires

Hébergement Web