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 10/01/2012, 10h18   #1
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
Par défaut Regroupement par semaine

Bonjour,

voici mon souci :

j'ai une table de la forme :

GROUPE CLASSE_ACTION CODE_ACTION DATE

Ce que je souhaite c'est pouvoir comptabiliser par semaine via un group by
sur GROUPE/CLASSE_ACTION/CODE_ACTION/DATE avec un TO_CHAR(YYYYWW)

l'inconvénient est que lors de semaines d'inactivité je n'ai pas de données à apparaître.

Comment faire pour faire apparaître les dates vides ?


Merci
sfoggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h29   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 546
Points : 7 546
Quelle est la requête que tu exécutes actuellement ?
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 12h10   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Pour faire apparaitre des choses inexistantes, il faut les créer.. Donc avoir une table de jointure pour toutes les semaines.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 21h15   #4
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
Voici ce que je fais :

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
SELECT
  GRP,
  GROUPE,
  CLASSE_ACTION,
  CODE_ACTION,
  ANNEE, 
  semaine,
  Count(*)
FROM
  (SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 14,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 14,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 14,'YYYYWW') GRP
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 21,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 21,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 21,'YYYYWW') GRP
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 28,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 28,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 28,'YYYYWW')
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 35,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 35,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 35,'YYYYWW')
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 42,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 42,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 42,'YYYYWW') GRP
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 49,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 49,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 49,'YYYYWW') GRP
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 56,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 56,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 56,'YYYYWW') GRP
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 63,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 63,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 63,'YYYYWW') GRP
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 70,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 70,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 70,'YYYYWW') GRP
  FROM
    DUAL
  UNION
  SELECT
    To_Number(To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 77,'YYYY')) ANNEE,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 77,'WW') semaine,
    To_Char(Trunc(NEXT_DAY(SYSDATE, TO_CHAR(TO_DATE('02-01-2012', 'DD-MM-YYYY'),'DAY')) ) - 77,'YYYYWW') GRP
  FROM
    DUAL) Tab1,
  ACTIVITE Tab2 
WHERE
  Tab1.GRP = TO_CHAR(Tab2.DATE,'YYYYWW')(+)
GROUP BY
	GROUPE, CLASSE_ACTION, CODE_ACTION, GRP, ANNEE, semaine
ORDER BY
  Tab1.GRP ;
Merci
sfoggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 11h40   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Personnellement, je ne suis vraiment pas fan des semaines YYYYWW.
Je leur préfère mille fois leur contrepartie ISO : IYYYIW.

Le hic des semaines WW, c'est que vous avez des semaines qui ne durent que quelques jours, si on regarde fin 2009 / début 2010 :
JOUR       JOUR_SEMAINE  SEMAINE    SEMAINE_ISO
---------- ------------- ---------- -----------
2009-12-21 Lundi         200951     200952     
2009-12-22 Mardi         200951     200952     
2009-12-23 Mercredi      200951     200952     
2009-12-24 Jeudi         200952     200952     
2009-12-25 Vendredi      200952     200952     
2009-12-26 Samedi        200952     200952     
2009-12-27 Dimanche      200952     200952     
2009-12-28 Lundi         200952     200953     
2009-12-29 Mardi         200952     200953     
2009-12-30 Mercredi      200952     200953     
2009-12-31 Jeudi         200953     200953     
2010-01-01 Vendredi      201001     200953     
2010-01-02 Samedi        201001     200953     
2010-01-03 Dimanche      201001     200953     
2010-01-04 Lundi         201001     201001     
2010-01-05 Mardi         201001     201001     
2010-01-06 Mercredi      201001     201001     
2010-01-07 Jeudi         201001     201001     
2010-01-08 Vendredi      201002     201001     
2010-01-09 Samedi        201002     201001     
2010-01-10 Dimanche      201002     201001
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 09h00   #6
Membre à l'essai
 
Inscription : septembre 2009
Messages : 75
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 75
Points : 22
Points : 22
Merci,

en effet l'utilisation ISO est plus pratique.

J'ai généré les infos manquantes et jointure après.

OK
sfoggy 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 09h27.


 
 
 
 
Partenaires

Hébergement Web