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 :

Simplification de ma requête - SELECT "à plat"


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 68
    Points : 40
    Points
    40
    Par défaut Simplification de ma requête - SELECT "à plat"
    Bonjour,

    J'ai actuellement un petit problème, j'ai fait une requête qui fonctionne, mais elle est lourde et j'aimerai savoir si on peut la simplifier.

    Voici la table de base

    CLIENT ANNEE CHIFFRE D'AFFAIRE
    A 2012 100
    A 2013 150
    B 2012 80
    B 2013 110

    Et j'aimerai qu'il m'affiche

    CLIENT CA
    A 100 150
    B 80 110

    J'ai réussi à le faire avec un COALESCE, mais c'est vraiment lourd.
    Quelqu'un aurait une idée de simplification?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Il faudrait un peu plus de précisions sur ce que tu veux... en l'état, je dirais simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT client, sum(case annee when 2012 then CA else 0 end as ca2012
    , sum(case annee when 2013 then CA else 0 end as ca2013
    FROM ta_table
    GROUP BY client

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    J'ai personnellement fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT client,
    COALESCE((select ca from fichier where annee=2012), 0) as 2012,
    COALESCE((select ca from fichier where annee=2013), 0) as 2013
    FROM FICHIER
    Du coup, je pense que cela revient au même, non?

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Bah normalement avec ma requête tu ne fais qu'une seule passe sur la table.
    Si tu traites tous les clients, ma requête devrait aller au moins deux fois plus vite...
    (je suppose que la version originale de ta requête fait le lien entre les sous-requêtes "scalaires" et la requête principale)

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Je vais essayer avec ta technique.

    Et oui, il y a un lien entre la requête scalaire et la requête. C'était juste un exemple, donc je n'ai pas détaillé

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

Discussions similaires

  1. Les quotes dans ma requête "select"
    Par Jonathan_pingu dans le forum SQL
    Réponses: 37
    Dernier message: 14/05/2009, 10h53

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