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 :

Tableau croisé Oracle 10g


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 98
    Par défaut Tableau croisé Oracle 10g
    Bonjour,
    j'aimerai faire un tableau croisé, mais n'étant pas à l'aise avec la syntaxe, je n'ai pas réussi à produire mon code d'après les exemples que j'ai trouvé.
    Est-ce que vous pourriez m'aider ?

    Au départ j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_client | date_start | bill_manager |nom |  total
    1001001 | 01.01.2010|   jon           |fred  | 200
    1001001 | 01.02.2010|   jon           |fred  | 150
    1001001 | 01.03.2010|   jon           |fred  | 220
    1001002 | 01.02.2010|   jon           |simon| 180
    1001002 | 01.03.2010|   jon           |simon| 170



    Et comme résultat de ma requête, j'aimerais un groupement par bill_manager, les noms en découlant et le montant total par mois et le cumul annuel, soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bill_manager | nom | id_client | jan | fev | mars | total
    jon           |fred  | 1001001 | 200|150  | 220   | 570
    jon           |simon|1001002  |      |180  | 170   | 350

    Dans ce cas la je peux facilement connaitre touts les colonnes, car c'est le total par mois qui m'intéresse.

    D'après ce que j'ai lu c'est possible de faire ça, mais je ne m'en sors pas.
    j'espère que vous pouvez m'aider.
    Merci

  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 : 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
    Effectuez des recherches sur le mot clef PIVOT dans le forum.

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ou avec un GROUP BY et des DECODE pour chaque colonne

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT bill_manager, 
    sum(DECODE(date_start, to_date('01.01.2010','DD.MM.RRRR'), total, 0)) as jan,
    sum(DECODE(date_start, to_date('01.02.2010','DD.MM.RRRR'), total, 0)) as fev,
    sum(total) as total
    FORM TATABLE
    GROUP BY bill_manager

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 98
    Par défaut
    Merci.

    J'ai réussi à faire qqch comme ca après avoir trouvé un exemple
    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
     
    select bill_manager,em_id,id_client,
    NVL(MAX(DECODE(date_start,to_date('1/1/2010','MM/DD/YYYY'),total_tva)),0) Janvier,
    NVL(MAX(DECODE(date_start,to_date('2/1/2010','MM/DD/YYYY'),total_tva)),0) Février,
    NVL(MAX(DECODE(date_start,to_date('3/1/2010','MM/DD/YYYY'),total_tva)),0) Mars,
    NVL(MAX(DECODE(date_start,to_date('4/1/2010','MM/DD/YYYY'),total_tva)),0) Avril,
    NVL(MAX(DECODE(date_start,to_date('5/1/2010','MM/DD/YYYY'),total_tva)),0) Mai,
    NVL(MAX(DECODE(date_start,to_date('6/1/2010','MM/DD/YYYY'),total_tva)),0) Juin,
    NVL(MAX(DECODE(date_start,to_date('7/1/2010','MM/DD/YYYY'),total_tva)),0) Juillet,
    NVL(MAX(DECODE(date_start,to_date('8/1/2010','MM/DD/YYYY'),total_tva)),0) Août,
    NVL(MAX(DECODE(date_start,to_date('9/1/2010','MM/DD/YYYY'),total_tva)),0) Septembre,
    NVL(MAX(DECODE(date_start,to_date('10/1/2010','MM/DD/YYYY'),total_tva)),0) Octobre,
    NVL(MAX(DECODE(date_start,to_date('11/1/2010','MM/DD/YYYY'),total_tva)),0) Novembre,
    NVL(MAX(DECODE(date_start,to_date('12/1/2010','MM/DD/YYYY'),total_tva)),0) Décembre,
    sum(total_tva) as Cumul
    FROM taxe_gsm
    Group By bill_manager,em_id,id_client
    L'affichage sur l'écran à l'air bon. est-ce que cela vous semble correcte comme façon de faire?

    edit: on dirait que cale fait. merci mcm.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/12/2011, 14h34
  2. [Oracle 10G] Tableau Croisé Dynamique
    Par anayathefirst dans le forum PL/SQL
    Réponses: 3
    Dernier message: 01/02/2011, 10h05
  3. affichage d'un tableau sous oracle forms 10g
    Par kahina_b dans le forum Forms
    Réponses: 3
    Dernier message: 13/06/2010, 00h49
  4. Tableau croisé dynamique sous oracle
    Par N_Ron dans le forum Oracle
    Réponses: 4
    Dernier message: 28/07/2009, 14h13
  5. Réponses: 6
    Dernier message: 27/09/2007, 13h38

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