Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 06/12/2011, 18h55   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 44
Points : 7
Points : 7
Par défaut Découper le résultat d'une requête

Bonsoir la team,

je souhaiterais découper le résultat d'une requête de façon à avoir mon UID minimum, UID maximum pour chacun de ces bloc.

Exemple:

je sélectionne les lignes d'une table:

Code :
1
2
3
SELECT *
FROM MA_TABLE
ORDER BY UID ASC
Résultat:

Citation:
---------------------------
-----------UID ----valeur--
---------------------------
Ligne 1:___12______val1__
Ligne 2:___26______val2__
Ligne 3:___33______val3__
Ligne 4:___46______val4__
Ligne 5:___78______val5__
Ligne 6:___108_____val6__

Pour mon exemple, je souhaiterais découper par groupe de 2 et avoir le résultat
suivant:

Citation:
--------------------------------
-----------uid_min----uid_max---
--------------------------------
Ligne 1:____12________26_____
Ligne 2:____33________46_____
Ligne 3:____78________108____
Avez-vous une idée de la requête à utiliser pour avoir ce résultat?

Merci d'avance pour votre aide.
bernidupont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 19h02   #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 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Essayez ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH MA_TABLE AS
(
SELECT 1 AS id,  12 AS val FROM dual union ALL
SELECT 2      ,  26        FROM dual union ALL
SELECT 3      ,  33        FROM dual union ALL
SELECT 4      ,  46        FROM dual union ALL
SELECT 5      ,  78        FROM dual union ALL
SELECT 6      , 108        FROM dual
)
  SELECT min(val) AS val_min
       , max(val) AS val_max
    FROM ma_table
GROUP BY floor((id-1)/2)
ORDER BY floor((id-1)/2) ASC;
 
   VAL_MIN    VAL_MAX
---------- ----------
        12         26
        33         46
        78        108
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 19h12   #3
Invité régulier
 
Inscription : janvier 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 44
Points : 7
Points : 7
Cette requête fonctionne mais cela ne correspond pas exactement à ce que j'attend.
En effet, ma table existant déjà, je n'ai pas les id.
Or dans votre exemple, vous créez la table avec les id.
Pouvez-vous m'expliquer svp?
bernidupont est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/12/2011, 19h35   #4
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
Il suffit de les recréer avec la fonction row_number() :
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
WITH MA_TABLE AS
(
SELECT 'val1' AS valeur,  12 AS "UID" FROM dual union ALL
SELECT 'val2'          ,  26          FROM dual union ALL
SELECT 'val3'          ,  33          FROM dual union ALL
SELECT 'val4'          ,  46          FROM dual union ALL
SELECT 'val5'          ,  78          FROM dual union ALL
SELECT 'val6'          , 108          FROM dual
)
  ,  SR AS
(
SELECT row_number() over(ORDER BY valeur ASC) AS id,
       "UID"
  FROM ma_table
)  
  SELECT min("UID") AS uid_min
       , max("UID") AS uid_max
    FROM SR
GROUP BY floor((id-1)/2)
ORDER BY floor((id-1)/2) ASC;
 
   UID_MIN    UID_MAX
---------- ----------
        12         26
        33         46
        78        108
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/12/2011, 13h06   #5
Invité régulier
 
Inscription : janvier 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 44
Points : 7
Points : 7
oui voilà j'ai réussi à faire ma requête en utilisant la fonction analytique rownumber() et la fonction floor().
Merci!!

Berni.
bernidupont 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 21h59.


 
 
 
 
Partenaires

Hébergement Web