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 de plusieurs sous-requête en parallèle


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Requête de plusieurs sous-requête en parallèle
    Bonjour,

    J'ai recherché et je me suis trituré le cerveau mais pas moyen de trouver une réponse à la problématique à laquelle je fais fasse, voici mon problème :

    Voici le type de table que je dois utiliser :

    Date |Nom |Valeur
    01/06/2013 |A |2
    01/06/2013 |A |0
    01/06/2013 |A |3
    01/06/2013 |B |1
    01/06/2013 |C |4
    01/06/2013 |C |4
    02/06/2013 |A |3
    02/06/2013 |B |7
    02/06/2013 |C |9
    02/06/2013 |C |4
    ...

    Le but est de regrouper par date et de calculer la valeur totale de chaque nom différent.

    Je dois exécuter une requête pour obtenir un tableau de la sorte :

    Date |Nom_A |Nom_B |Nom_C
    01/06/2013 |5 (3+0+2) |1 |8 (4+4)
    02/06/2013 |3 |7 |13 (4+9)

    (les parenthèses sont uniquement par le détail du calcul, elles ne doivent pas apparaître dans le résultat final)
    A noter que l'on sait que le champ Nom ne peut avoir que 3 valeurs (A, B ou C)

    Comme je l'ai dit auparavant, j'ai essayé plusieurs solutions sans y parvenir, peut-être que j'ai pris le problème par le mauvais pied, mais je suis bloqué. Si une bonne âme peut m'aiguiller ou réussir à trouver la réponse, je le remercie par avance

    NB : je suis sous Oracle avec sqldevelopper
    PS : désolé pour la lecture non évidente des 2 tableaux

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tu peux essayer avec ça :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
         t1.Date
        ,Nom_A = (SELECT SUM(Valeur)
                    FROM Table1
                    WHERE Nom = 'A' AND Date = t1.Date)
        ,Nom_B = (SELECT SUM(Valeur)
                    FROM Table1
                    WHERE Nom = 'B' AND Date = t1.Date)
        ,Nom_C = (SELECT SUM(Valeur)
                    FROM Table1
                    WHERE Nom = 'C' AND Date = t1.Date)
    FROM Table1 t1
    GROUP BY t1.Date
    Attention toutefois car le mot "Date" est un mot clef réservé par Oracle. Donc il vaudrait mieux renommer ta colonne si tu en as la possibilité.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Bonjour,
    On peut aussi le faire sans sous-requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
    t1.Date,
    sum(case when nom = 'A' then Valeur else 0 end),
    sum(case when nom = 'B' then Valeur else 0 end),
    sum(case when nom = 'C' then Valeur else 0 end),
    FROM Table1 t1
    GROUP BY t1.Date

    Tatayo.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/02/2013, 14h23
  2. sous requête avec plusieurs lignes
    Par souarit dans le forum Bases de données
    Réponses: 0
    Dernier message: 09/02/2009, 01h18
  3. Comment créer une sous requête sur plusieurs champs?
    Par Anonymouse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/06/2008, 09h13
  4. Sous requête avec plusieurs retours
    Par grunk dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/10/2007, 13h57
  5. Sous-requête excutée plusieurs fois dans une requête
    Par sheridan31 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/07/2006, 16h18

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