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 :

SUM dans une UNION


Sujet :

Langage SQL

  1. #1
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut SUM dans une UNION
    Bonjour,

    J'ai une table qui recense le niveau des personnes dans certaines competences construite comme ca
    index
    personne
    competence
    niveau

    Je cherche a recuperer les "personne" qui ont certaines "competence" et la somme de leur "niveau".

    J'ai fini par pondre le mammouth suivant (dans cet exemple je recupere les personnes ayant les competences 1 et 15)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT personne,niveau FROM competences
     WHERE competence=1 
        AND personne IN (SELECT personne FROM competences WHERE competence=15)
    UNION
    SELECT personne,niveau FROM competences
     WHERE competence=15
        AND personne IN (SELECT personne FROM competences WHERE competence=1)
    Malheureusement comme vous le voyez je n'arrive pas à me debrouiller dans cette somme (j'obtiens une somme pour chaque partie de l'union).

    Alors mes deux questions sont
    - Est-ce qu'il n'y a pas plus simple comme ecriture pour recuperer la liste des personnes ?
    - Peut-on faire la somme globale sur une union ?

    Je vous remercie pour votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    Essayez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT personne, SUM(niveau) 
    FROM   competences
    WHERE  competence IN (1, 15)
    GROUP  BY personne
    HAVING COUNT(*) = 2

    A +

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Merci pour votre réponse c'est exactement ce que je voulais.

    J'etais parti logiquement sur une requete AND.

    Je n'aurais jamais pensé à une requete OR puis eliminer ceux qui ont moins de lignes que de criteres.

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

Discussions similaires

  1. sum() dans une jointure interne
    Par xenos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2007, 17h42
  2. Plusieurs SUM dans une requête
    Par pj69100 dans le forum Requêtes
    Réponses: 6
    Dernier message: 02/01/2007, 10h34
  3. [ACCESS2002][fonction sum dans une requête]
    Par louroulou dans le forum Access
    Réponses: 1
    Dernier message: 14/06/2006, 09h26
  4. utiliser le resultat d'un SUM dans une variable
    Par Qapoka dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/05/2006, 15h47
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18

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