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

Langage SQL Discussion :

Requête SQL pivot ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Par défaut Requête SQL pivot ?
    Bonjour,

    J'ai voulu essayé de faire une fonction pivot mais sans succés pourriez-vous me dire si la fonction pivot est bien celle qui faut que j'utilise pour faire ce dont je souhaite :

    j'ai une table suivante :

    Mat Nom    Type Hours Date
    --- ------ ---- ----- ----------
    001 jerome eff  7     03/12/2012
    001 jerome th   8     03/12/2012
    002 andree eff  6     03/12/2012
    002 andree th   8     03/12/2012
    001 jerome eff  8     04/12/2012
    002 andree eff  8     04/12/2012
    Je voudrais faire une requête select en SQL qui me retourne :
    Mat Nom    eff th   Date
    --- ------ --- ---- ----------
    001 jerome 7   8    03/12/2012
    002 andree 6   8    03/12/2012
    001 jerome 8   NULL 04/12/2012
    002 andree 8   NULL 04/12/2012
    D'avance merci pour votre aide.

    PS : La base de donnée est un serveur SQL 2012

    Merci,

    Jérôme

  2. #2
    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 : 48
    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 vous confirme, c'est bien la fonctionnalité PIVOT dont vous avez besoin.

  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
    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
    with test as
    (       
    select '001'Mat, 'jerome' Nom, 'eff' Type, 7 Hours,    to_date('03/12/2012') jour from dual union 
    select '001', 'jerome', 'th',   8    , to_date('03/12/2012') from dual union 
    select '002', 'andree', 'eff',  6    , to_date('03/12/2012')from dual union 
    select '002', 'andree', 'th',   8    , to_date('03/12/2012')from dual union 
    select '001', 'jerome', 'eff',  8    , to_date('04/12/2012')from dual union 
    select '002', 'andree', 'eff',  8    , to_date('04/12/2012')from dual )
     
     
    select nvl(A.mat,B.mat) mat,nvl(A.nom,B.nom) nom,A.eff,B.th,nvl(A.jour,B.jour)jour from
     
      (select mat,nom,jour,hours eff
       from test
       where type='eff')A 
     
    full   join
     
      (select mat,nom,jour,hours th
       from test
       where type='th')B 
     
    on A.mat=B.mat and A.jour=B.jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       	MAT	NOM	EFF	TH	JOUR
    1	001	jerome	7	8	03/12/2012
    2	002	andree	6	8	03/12/2012
    3	002	andree	8		04/12/2012
    4	001	jerome	8		04/12/2012

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Par défaut
    Merci Islamov2000,

    Ton code m'as beaucoup aidé je dirais meme plus ça fonctionne avec ma table de production ^^

    J'ai seulement utilisé COALESCE à la place de mvl car c'est sur un serveur SQL 2012.

    Je te remercie encore de ton aide précieuse

    @bientot car je doit integrer une deuxieme table pour avoir un peu plus de données si vraiment je n'y arrive pas je reviendrais demander de l'aide

    Jérôme

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Par défaut
    Bon finalement je séche encore ...

    Voila l'exposé :

    2 tables : ABSENCE , TOTAL

    pour la table TOTAL :
    Mat Nom    Type Hours Date
    --- ------ ---- ----- ----------
    001 jerome eff  7     03/12/2012
    001 jerome th   8     03/12/2012
    002 andree eff  6     03/12/2012
    002 andree th   8     03/12/2012
    001 jerome eff  8     04/12/2012
    002 andree eff  8     04/12/2012
    002 andree th   8     05/12/2012
    Pour la table ABSENCE :

    Mat Nom    Type2 Hours Date
    --- ------ ---- ----- ----------
    001 jerome cp   7     04/12/2012
    002 andree rtt  6     05/12/2012
    


    Il me faudrait enfaite combiner les 2 tables pour avoir ceci comme résultat
    Mat Nom    eff  th    cp   rtt  Date
    --- ------ ---- ----  ---- ---- ----------
    001 jerome 7    8     NULL NULL 03/12/2012
    002 andree 6    8     NULL NULL 03/12/2012
    001 jerome 8    NULL  7    NULL 04/12/2012
    002 andree 8    NULL  NULL NULL 04/12/2012
    002 andree NULL 8     NULL 6    05/12/2012
    Les champs des 2 tables sont identique sauf pour le "Type" .

    D'avance merci pour votre soutient

    Jerôme

  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
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    with total as
    (       
    select '001'Mat  , 'jerome' Nom, 'eff' Type   , 7 Hours, to_date('03/12/2012') jour from dual union 
    select '001'     , 'jerome'    , 'th'         , 8      , to_date('03/12/2012') from dual union 
    select '002'     , 'andree'    , 'eff'        , 6      , to_date('03/12/2012')from dual union 
    select '002'     , 'andree'    , 'th'         , 8      , to_date('03/12/2012')from dual union 
    select '001'     , 'jerome'    , 'eff'        , 8      , to_date('04/12/2012')from dual union 
    select '002'     , 'andree'    , 'eff'        , 8      , to_date('04/12/2012')from dual union
    select '002'     , 'andree'    , 'th'         , 8      , to_date('05/12/2012')from dual),
    absence as
    (select '001' mat , 'jerome' nom , 'cp' type2 ,  7 hours, to_date('04/12/2012') jour from dual union
    select '002' mat , 'andree' nom , 'rtt' type2 ,  6 hours, to_date('05/12/2012') jour from dual
     
    )
     
     
     
    select C.mat,C.nom,C.eff,C.th,F.cp,F.rtt,C.jour from 
    ---------------------------------------------------------------------------------------------
    (select nvl(A.mat,B.mat) mat,nvl(A.nom,B.nom) nom,A.eff,B.th,nvl(A.jour,B.jour)jour from
        (select mat,nom,jour,hours eff
         from total
         where type='eff')A --A
     
        full join
     
        (select mat,nom,jour,hours th
         from total
         where type='th')B --B
     
        on A.mat=B.mat and A.jour=B.jour) C--C
    ----------------------------------------------------------------------------------------------
    ---------
    full join
    -------- 
    ---------------------------------------------------------------------------------------------
    (select nvl(D.mat,E.mat) mat,nvl(D.nom,E.nom) nom,D.cp,E.rtt,nvl(D.jour,E.jour)jour from
     
        (select mat,nom,jour,hours cp
         from absence
         where type2='cp')D --D
     
        full join
     
        (select mat,nom,jour,hours rtt
         from absence
         where type2='rtt')E--E
     
        on D.mat=E.mat and D.jour=E.jour) F --F
    ----------------------------------------------------------------------------------------------
    on C.mat=F.mat and C.jour=F.jour
     
    order by C.jour,C.mat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       	MAT	NOM	EFF	TH	CP	RTT	JOUR
    1	001	jerome	7	8			03/12/2012
    2	002	andree	6	8			03/12/2012
    3	001	jerome	8		7		04/12/2012
    4	002	andree	8				04/12/2012
    5	002	andree		8		6	05/12/2012

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

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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