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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.