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 :

decode sur deux colonnes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Par défaut decode sur deux colonnes
    Je veux faire une requête qui fait la somme des montants mais en faisant le test sur le sens d'opération.Par exemple ma table contient:
    montant , sens
    10 , D
    20 , D
    30 , C
    12 , C

    Je veux en sortie:
    montantD, montantC
    30 , 42


    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select debit.*, credit.* from 
      (select sum(montant) montantD from table where sens = 'D') debit,
      (select sum(montant) montantC from table where sens = 'C') credit

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    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
     
    With data as (
      2  select 10 mnt, 'D' type from dual union all
      3  select 20 mnt, 'D' type from dual union all
      4  select 30 mnt, 'C' type from dual union all
      5  select 12 mnt, 'C' type from dual
      6  )
      7  select Max(case when type = 'D' then Sum(mnt) else null end) mntD,
      8         Max(case when type = 'C' then Sum(mnt) else null end) mntC
      9  from data
     10  group by type
     11  /
     
          MNTD       MNTC
    ---------- ----------
            30         42

  4. #4
    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
    On peut économiser un aggrégat avec cette requête-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH DATA AS (
    SELECT 10 mnt, 'D' type FROM dual union ALL
    SELECT 20 mnt, 'D' type FROM dual union ALL
    SELECT 30 mnt, 'C' type FROM dual union ALL
    SELECT 12 mnt, 'C' type FROM dual
    )
    SELECT
         sum(case when type = 'D' then mnt else 0 end) mntD,
         sum(case when type = 'C' then mnt else 0 end) mntC
    FROM DATA

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Waldar Voir le message
    On peut économiser un aggrégat avec cette requête-ci :
    ...
    C'est mieux

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Par défaut
    Les réponses sont bonnes mais ça ne résout pas mon problème.J'ai d'autres champs à sélectionner dans d'autres tables.Exemple:

    Select a.client,a.nom,b.mont,c.libelle,sum(d.mnt) mntD,sum(d.mnt) mntC
    from table1 a,table2 b,table3 c,table4 d
    where (conditions)

    group by a.client,a.nom,b.mont,c.libelle


    Ma version d'oracle est 9.2.0.5

  7. #7
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjour,

    quel version oracle tu as ...
    et combien tu as de lignes exactement ?

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

Discussions similaires

  1. Flottant à cheval sur deux colonnes
    Par yobbas dans le forum Mise en forme
    Réponses: 2
    Dernier message: 29/09/2006, 16h02
  2. [XSLT] Mettre sur deux colonnes
    Par tiboel dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/07/2006, 14h38
  3. Afficher des enregistrements sur deux colonnes
    Par Dauphind dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 14h16
  4. [Tableaux] Array sur deux colonnes et foreach..
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2006, 08h46
  5. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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