IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Comment écrire cette requête ?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 32
    Par défaut Comment écrire cette requête ?
    Bonjour,

    J'ai une table qui contient les quatre colonnes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Activité           Date_debut                        Date_fin                  Priorité
    Natation          2012/10/24 08:10:00           2012/10/24 10:10:00             2
    Judo              2012/10/24 11:00:00           2012/10/24 12:00:00             1
    Lecture           2012/10/24 14:10:00           2012/10/24 17:10:00             3
    Jogging           2012/10/24 17:30:00           2012/10/24 18:30:00             4
     
    Natation          2012/10/25 08:10:00           2012/10/25 10:10:00             2
    Jogging           2012/10/25 17:30:00           2012/10/25 18:30:00             4
    Je cherche à obtenir ceci : classer par date, les activités par ordre de priorité. A cela, s'ajoute, la durée par activité, le tout séparé par des ";".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Date                   Actvité_priorité_durée_en_heure
    2012/10/24            Judo;1;Natation;2;Lecture;3;Jogging;1
    2012/10/25            Judo;0;Natation;2;Lecture;0;Jogging;1
    Avez-vous une idée ?
    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    pas directement !

    il vaut mieux passé par le programme qui pilote la base (PHP, C++, etc)

  3. #3
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    sous quel SGBD travailles tu?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 32
    Par défaut
    Merci pour vos réponses.

    Je suis sous Oracle 10.
    J'ai pensé utiliser l'ETL d'Oracle (ODI) pour résoudre ce problème mais j'avoue que ce n'est pas simple.

  5. #5
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    pas directement !

    il vaut mieux passé par le programme qui pilote la base (PHP, C++, etc)
    ou d'utiliser les procédures stockées

  6. #6
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    Si tu n's pas assez de priorités, je te propose une solution avec un jeu de doneées comportant 4 priorités.
    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
    with tab as
    (                                                
    select 'Natation' Activité,          to_date('2012/10/24 08:10:00','yyyy/mm/dd hh24:mi:ss') Date_debut            ,'2012/10/24 10:10:00'  Date_fin,             2 Priorité from dual union
    select 'Judo'             , to_date('2012/10/24 11:00:00','yyyy/mm/dd hh24:mi:ss')           ,'2012/10/24 12:00:00',             1 from dual union
    select 'Lecture'          ,to_date( '2012/10/24 14:10:00','yyyy/mm/dd hh24:mi:ss')           ,'2012/10/24 17:10:00',             3 from dual union
    select 'Jogging'          , to_date('2012/10/24 17:30:00','yyyy/mm/dd hh24:mi:ss')          ,'2012/10/24 18:30:00',             4 from dual union
    select 'Natation'         ,to_date('2012/10/25 08:10:00','yyyy/mm/dd hh24:mi:ss')           ,'2012/10/25 08:10:00',             2 from dual union
    select 'Jogging'          , to_date('2012/10/25 17:30:00','yyyy/mm/dd hh24:mi:ss')           ,'2012/10/25 17:30:00',             4 from dual union
    select 'Natation'         ,to_date('2012/10/26 08:10:00','yyyy/mm/dd hh24:mi:ss')             ,'2012/10/24 10:10:00'  ,             4 from dual union
    select 'Judo'             , to_date('2012/10/26 11:00:00','yyyy/mm/dd hh24:mi:ss')           ,'2012/10/26 12:00:00',             2 from dual union
    select 'Lecture'          ,to_date( '2012/10/26 14:10:00','yyyy/mm/dd hh24:mi:ss')           ,'2012/10/26 17:10:00',             1 from dual union
    select 'Jogging'          , to_date('2012/10/26 17:30:00','yyyy/mm/dd hh24:mi:ss')          ,'2012/10/26 18:30:00',             3 from dual 
     
    )
     
     
     
    select XX.date_debut,XX.ordre from 
     
    (select trunc(A.date_debut)date_debut,
    (A.Activité||';'||A.Priorité||';'||B.Activité||';'||B.Priorité||';'||C.Activité||';'||C.Priorité||';'||D.Activité||';'||D.Priorité) ordre,length(A.Activité||';'||A.Priorité||';'||B.Activité||';'||B.Priorité||';'||C.Activité||';'||C.Priorité||';'||D.Activité||';'||D.Priorité)taille
    from ((tab A left join tab B on trunc(A.date_debut)=trunc(B.date_debut) and A.Priorité<B.Priorité)
    left join tab C on trunc(B.date_debut)=trunc(C.date_debut)and B.Priorité<C.Priorité)
    left join tab D on trunc(C.date_debut)=trunc(D.date_debut)and C.Priorité<D.Priorité
    group by trunc(A.date_debut),(A.Activité||';'||A.Priorité||';'||B.Activité||';'||B.Priorité||';'||C.Activité||';'||C.Priorité||';'||D.Activité||';'||D.Priorité),length(A.Activité||';'||A.Priorité||';'||B.Activité||';'||B.Priorité||';'||C.Activité||';'||C.Priorité||';'||D.Activité||';'||D.Priorité)
    )XX
     
    join
     
    (select trunc(A.date_debut) date_debut,max(length(A.Activité||';'||A.Priorité||';'||B.Activité||';'||B.Priorité||';'||C.Activité||';'||C.Priorité||';'||D.Activité||';'||D.Priorité))taille
    from ((tab A left join tab B on trunc(A.date_debut)=trunc(B.date_debut) and A.Priorité<B.Priorité)
    left join tab C on trunc(B.date_debut)=trunc(C.date_debut)and B.Priorité<C.Priorité)
    left join tab D on trunc(C.date_debut)=trunc(D.date_debut)and C.Priorité<D.Priorité
    group by trunc(A.date_debut)
    )YY on XX.date_debut=YY.date_debut and XX.taille=YY.taille
    bonne chance

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je l'ai fait ainsi :
    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
    WITH MaTable AS
    (                                                
    SELECT 'Natation' as Activite, to_date('2012/10/24 08:10','yyyy/mm/dd hh24:mi') as Date_debut, to_date('2012/10/24 10:10','yyyy/mm/dd hh24:mi') as Date_fin, 2 as Priorite FROM dual union all
    SELECT 'Judo'                , to_date('2012/10/24 11:00','yyyy/mm/dd hh24:mi')              , to_date('2012/10/24 12:00','yyyy/mm/dd hh24:mi')            , 1             FROM dual union all
    SELECT 'Lecture'             , to_date('2012/10/24 14:10','yyyy/mm/dd hh24:mi')              , to_date('2012/10/24 17:10','yyyy/mm/dd hh24:mi')            , 3             FROM dual union all
    SELECT 'Jogging'             , to_date('2012/10/24 17:30','yyyy/mm/dd hh24:mi')              , to_date('2012/10/24 18:30','yyyy/mm/dd hh24:mi')            , 4             FROM dual union all
    SELECT 'Natation'            , to_date('2012/10/25 08:10','yyyy/mm/dd hh24:mi')              , to_date('2012/10/25 10:10','yyyy/mm/dd hh24:mi')            , 2             FROM dual union all
    SELECT 'Jogging'             , to_date('2012/10/25 17:30','yyyy/mm/dd hh24:mi')              , to_date('2012/10/25 18:30','yyyy/mm/dd hh24:mi')            , 4             FROM dual
    )
      ,  Tab_deb as
    (
    select distinct trunc(Date_debut) as dt_deb from MaTable
    )
        select td.dt_deb as "Date"
             , rtrim(REPLACE(REPLACE(XMLAgg(XMLElement("x", mt.Activite || ';' || coalesce(to_char((mt.Date_fin - mt.Date_debut)*24, 'fm90'), '0')) order by mt.Priorite asc), '<x>', ''), '</x>', ';'), ';') as "Actvité_Durée"
          from MaTable mt partition by (mt.Activite, mt.Priorite)
    right join Tab_deb td
            on td.dt_deb = trunc(mt.Date_debut)
      group by td.dt_deb
      order by td.dt_deb asc;
     
    Date       Actvité_Durée
    ---------- -------------------------------------
    2012/10/24 Judo;1;Natation;2;Lecture;3;Jogging;1
    2012/10/25 Judo;0;Natation;2;Lecture;0;Jogging;1

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 32
    Par défaut
    Merci pour vos réponses.
    Je vais essayer de comprendre le code et le mettre en œuvre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] comment écrire cette requête sous sql?
    Par NANOUSUN dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 27/10/2009, 21h13
  2. Comment formuler cette requête
    Par hudony dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/02/2009, 22h12
  3. Réponses: 1
    Dernier message: 26/08/2008, 14h26
  4. Comment faire cette requête ?
    Par Cazaux-Moutou-Philippe dans le forum Bases de données
    Réponses: 11
    Dernier message: 02/11/2007, 08h44
  5. [MFC] comment écrire des requêtes SQL
    Par kitsune dans le forum MFC
    Réponses: 9
    Dernier message: 27/09/2005, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo