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 :

select avec calcul sur plusieurs colones ?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Par défaut select avec calcul sur plusieurs colones ?
    salut les amis,

    voilà j'ai une table qui se presente comme suit:

    date | activation| offre
    01/03/2011 1 PP
    01/03/2011 5 PS
    01/03/2011 2 PS
    02/03/2011 4 PP
    02/03/2011 1 PP

    je voudrai appliquer une requete sql qui me permetterai d'avoir un resultat chiffré (une somme sur la colone activation et count sur la colone offre) le tout par date comme suit:

    date | activation| offre PP| offre PS
    01/03/2011 8 1 2
    02/03/2011 5 2 0

    merci à vous

  2. #2
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Data As (
      2  Select To_date('01/03/2011','DD/MM/YYYY') As dat, 1 As activation, 'PP' As offre From dual union all
      3  Select To_date('01/03/2011','DD/MM/YYYY') As dat, 5, 'PS' From dual union all
      4  Select To_date('01/03/2011','DD/MM/YYYY') As dat, 2, 'PS' From dual union all
      5  Select To_date('02/03/2011','DD/MM/YYYY') As dat, 4, 'PP' From dual union all
      6  Select To_date('02/03/2011','DD/MM/YYYY') As dat, 1, 'PP' From dual
      7  )
      8  Select dat, Sum(activation),
      9         Count(Case When Offre = 'PP' Then 1 End) As PP,
     10         Count(Case When Offre = 'PS' Then 1 End) As PS
     11    From Data
     12   Group By Dat
     13   Order By Dat
     14  /
     
    DAT         SUM(ACTIVATION)         PP         PS
    ----------- --------------- ---------- ----------
    01/03/2011                8          1          2
    02/03/2011                5          2          0
     
    SQL>

  3. #3
    Membre confirmé Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Par défaut
    merci à toi mnitu,

    c'est ok pour le resultat.
    maintenant je vais changer un peu la done pour ce qui suit en gardant la même table:

    date | activation| offre
    01/03/2011 1 PP
    01/03/2011 5 PS
    01/03/2011 2 PS
    02/03/2011 4 PP
    02/03/2011 1 PP

    seulement le resultat que je souhaiterai avoir c'est la somme des activation par offre et non pas le comptage de ces dernières:

    date | activation| offre PP| offre PS
    01/03/2011 8 1 7
    02/03/2011 5 5 0

    c'est à dire que la somme des PP + PS = Activation par date

    comment puis-je remodeler la requete pour avoir ce resultat?

    merci à toi

  4. #4
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    WITH DATA AS (...)
    SELECT dat, Sum(activation),
           nvl(sum(Case When Offre = 'PP' Then activation End),0) AS PP,
           nvl(sum(Case When Offre = 'PS' Then activation End),0) AS PS
      FROM DATA
    GROUP BY Dat
    ORDER BY Dat

  5. #5
    Membre confirmé Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Par défaut
    je te remercie Drizzt,

    cette manip fonctionne bien sur Oracle, mais là je suis confronté à une situation 'Sql server' et les fonction telle que nvl n'y sont pas reconnue

    je sais que ce n'est pas le lieu pour y débattre mais est-ce possible d'avoir une réponse avec paramétrage Sql Server au lieu d'Oracle

    merci à toi

  6. #6
    Membre confirmé Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Par défaut
    c'est bon Drizzt,

    j'ai trouvé l'équivalent Sqlserver, c'est la fonction isnull().

    merci à toi mon ami

    Salutations

  7. #7
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Tsss tu es bien dans le forum Oracle pourtant

    D'après Google, tu peux remplacer NVL par ISNULL.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/02/2012, 12h25
  2. [Réseau] select() et accept() sur plusieurs sockets
    Par Higestromm dans le forum C++
    Réponses: 13
    Dernier message: 13/10/2008, 09h18
  3. Jointure avec conditions sur plusieurs colonnes
    Par ben53 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/11/2005, 09h27
  4. Calcul sur plusieurs champs similaires
    Par Zebulonn dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2005, 14h24
  5. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41

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