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 21/09/2011, 18h48   #1
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Par défaut Partager avec vous la méthode Tabibitosan

Bonjour,

Ce message est pour partager avec vous la méthode Tabibitosan, cette méthode consiste à grouper les données selon différents critères.

Exemple :

On veut créer des groupes de prêts (Loan) qui ont des numéros de prêt consécutifs (les numéros de prêt (loan_id) 1, 2,3 forment le groupe 1, le 7 forme le groupe 2, les 10 et le 11 forment le groupe 3)

Le contenu de la table
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
WITH loan AS
     (SELECT 1 loan_id, 'xxx' bn
        FROM DUAL
      UNION ALL
      SELECT 2 loan_id, NULL borrower_name
        FROM DUAL
      UNION ALL
      SELECT 3 loan_id, NULL borrower_name
        FROM DUAL
      UNION ALL
      SELECT 7 loan_id, 'ac' borrower_name
        FROM DUAL
      UNION ALL
      SELECT 10 loan_id, 'ac' borrower_name
        FROM DUAL
      UNION ALL
      SELECT 11 loan_id, NULL borrower_name
        FROM DUAL)
La requête :
Code :
1
2
3
4
5
6
7
 
 
SELECT   loan_id, bn, 'G' || DENSE_RANK () OVER (ORDER BY makegroup) grp_id
    FROM (SELECT loan_id, bn,
                 loan_id - ROW_NUMBER () OVER (ORDER BY loan_id) AS makegroup
            FROM loan)
ORDER BY loan_id;

La demonstration:
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
 
 
12:24:38 Scott@WEBDEVP>WITH loan AS
12:24:41   2       (SELECT 1 loan_id, 'xxx' bn
12:24:41   3          FROM DUAL
12:24:41   4        UNION ALL
12:24:41   5        SELECT 2 loan_id, NULL borrower_name
12:24:41   6          FROM DUAL
12:24:41   7        UNION ALL
12:24:41   8        SELECT 3 loan_id, NULL borrower_name
12:24:41   9          FROM DUAL
12:24:41  10        UNION ALL
12:24:41  11        SELECT 7 loan_id, 'ac' borrower_name
12:24:41  12          FROM DUAL
12:24:41  13        UNION ALL
12:24:41  14        SELECT 10 loan_id, 'ac' borrower_name
12:24:41  15          FROM DUAL
12:24:41  16        UNION ALL
12:24:41  17        SELECT 11 loan_id, NULL borrower_name
12:24:41  18          FROM DUAL)
12:24:41  19  SELECT   loan_id, bn, 'G' || DENSE_RANK () OVER (ORDER BY makegroup) grp_id
12:24:41  20      FROM (SELECT loan_id, bn,
12:24:41  21                   loan_id - ROW_NUMBER () OVER (ORDER BY loan_id) AS makegroup
12:24:41  22              FROM loan)
12:24:41  23  ORDER BY loan_id;
 
   LOAN_ID BN  GRP_ID
---------- --- -----------------------------------------
         1 xxx G1
         2     G1
         3     G1
         7 ac  G2
        10 ac  G3
        11     G3
 
6 ligne(s) sélectionnée(s).
 
12:24:43 Scott@WEBDEVP>

Pour plus ample informations sur la méthode Tabibitosan, Veuillez consulter le lien suivant:

https://forums.oracle.com/forums/thr...art=0&tstart=0


Cordialement Salim.
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 21/09/2011, 22h00   #2
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 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je ne connaissais pas le nom, mais dès qu'un problème de rupture, de création de plage apparaît c'est très souvent une solution performante.

Je m'en étais servi par exemple sur ces sujets :
http://www.developpez.net/forums/d97...enation-dates/
http://www.developpez.net/forums/d99...ction-rupture/

Merci salim11 !
__________________
Email : http://scr.im/waldar
Waldar est actuellement 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 17h29.


 
 
 
 
Partenaires

Hébergement Web