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 IIF et SUM


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Points : 41
    Points
    41
    Par défaut Requête SQL IIF et SUM
    Bonjour à tous,

    J'ai une table 'trade' qui contient des ordres (achat/vente) dont la différence se note au niveau de la colonne quantité (Achat = Quantité > 0 et Vente = Quantité < 0)
    Pas très compliqué.

    Ce que je voudrais faire c'est une requete qui me dise la volumétrie journalière des achats et des ventes distinctes.

    C'est possible ?

    Voici ma tentative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT iif(tr.quantity > 0 , sum(tr.trade_price * tr.quantity) AS ACHAT, sum(tr.trade_price * tr.quantity) AS VENTE )
    FROM trade tr
    WHERE tr.trade_date_time >= to_date ('01122008','ddmmyyyy')
    AND   tr.trade_date_time <= to_date ('01012009','ddmmyyyy')
    ORDER BY tr.trade_date_time
    GROUP BY tr.trade_date_time

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Que donne ceci :

    Code SQL : 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 
        SUM(IIF(
            tr.quantity > 0 , 
            tr.trade_price * tr.quantity,
            0
        ) AS ACHAT, 
        - SUM(IIF(
            tr.quantity > 0 , 
            0,
            tr.trade_price * tr.quantity
        ) AS VENTE 
    FROM trade tr
    WHERE tr.trade_date_time >= to_date ('01122008','ddmmyyyy')
    AND   tr.trade_date_time <= to_date ('01012009','ddmmyyyy')
    ORDER BY tr.trade_date_time
    GROUP BY tr.trade_date_time

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    GROUP BY est à placer avant le ORDER BY.
    La syntaxe du IIF, je ne la connais pas, mais êtes-vous sûr que votre SGBD ne supporte pas la fonction normative CASE WHEN THEN ELSE END ?

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bien vu pour le GROUP BY/ORDER BY
    Je n'avais pas lu la requête jusqu'au bout

    Le IIF m'a fait supposé qu'il s'agissait d'ACCESS lequel (me semble-t-il) ne connais pas le CASE WHEN...

    Cela dit en effet, s'il ne s'agit pas d'Access, un CASE serait bien mieux !

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Je suis sous Oracle 10g

    Je crois que les IIF ne sont pas reconnus ou alors je ne sais pas m'en servir car lorsque je retape la requete de aieeeeuuuuuuu, j'obtiens une erreur "missing right parenthesis" or il ne manque rien du tout...

    Je vais partir sur un Case pour voir ce que cela donne !

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    en effet, tout remis dans l'ordre et avec un case et avec la colonne tr.trade_date_time spécfiée dans le select cela donne

    Code SQL : 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
     
    SELECT 
        tr.trade_date_time,
        SUM(
            CASE WHEN tr.quantity > 0 
                THEN tr.trade_price * tr.quantity
                ELSE 0
            END
        ) AS ACHAT, 
        - SUM(
            CASE WHEN tr.quantity > 0 
                THEN 0
                ELSE tr.trade_price * tr.quantity
            END
        ) AS VENTE 
    FROM trade tr
    WHERE tr.trade_date_time >= to_date ('01122008','ddmmyyyy')
    AND   tr.trade_date_time <= to_date ('01012009','ddmmyyyy')
    GROUP BY tr.trade_date_time
    ORDER BY tr.trade_date_time

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    merci pour ton aieu.

    Ca m'a été vraiment vraiment utile

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

Discussions similaires

  1. [WD14] Requète SQL Sum
    Par AUZUR dans le forum WinDev
    Réponses: 11
    Dernier message: 25/09/2009, 17h27
  2. [AC-2007] requête SQL comparaison de dates avec IIF
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/09/2009, 15h30
  3. Problème de SUM sur une requête SQL
    Par Lapicure dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/06/2007, 11h51
  4. Requête SQL avec UNION, sum et GROUP BY
    Par Guitariff dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/12/2006, 13h48
  5. Pb sur SUM dans requête SQL exécutée sous VB
    Par MAKSIM dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/11/2006, 17h07

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