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 :

Requete SQL sur une vue


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut Requete SQL sur une vue
    bonjour

    J'ai une vue qui la forme suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    admID     scId    value   date 
     
    1            2        12       05.01.2010 12:23
    1            2        13       05.01.2010 12:29
    1            3        10       04.01.2010 11:29
    1            3        11       04.01.2010 11:28
    1            3        21       04.01.2010 11:26
    1            3        31       04.01.2010 11:20 
    2            2        16       03.01.2010 17:20  
    2            2        17       03.01.2010 16:20  
    2            2        19       03.01.2010 15:20 
    2            3        27       03.01.2010 17:20
    Je peine à écrire une requete SQL qui me donnerais la vue suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    admID         value1    value2 
    1                25           73
    2                52           27
    les valeurs de value1 sont les sommes des valeurs de value pour scId = 2

    (i.e : pour admIs= 1 et scId = 2 on 25 = 12+13)

    et les valeurs de value2 sont les sommes des valeurs de value pour scId = 3.

    Merci pour l'aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Qu'as-tu essayé comme requête ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Qu'as-tu essayé comme requête ?
    j'ai essayé cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select  X.id , X.value value1, Y.value  value2 from  (select T2.admID id,sum(T2.value) value from View T2  where   T2.scId    =3  group by T2.admID ) X ,
    (select T2.admID id, sum(T2.value) value from View T2  where   T2.scId    = 2 group by T2.admID) Y where X.id=Y.id
    mais elle ne donne que les lignes existante dans les deux vues X et Y..

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Essayez avec CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
           admid,
           sum(CASE scid WHEN 2 THEN value ELSE 0 END) AS value1,
           sum(CASE scid WHEN 3 THEN value ELSE 0 END) AS value2
    FROM ...
    GROUP BY admid

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    je mets quoi apres le from ?
    merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Le nom de votre vue par exemple, vous ne nous l'avez pas donné.

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    c'est exactement ce que je voulais faire.
    Un grand merci
    Je ne connaissais pas cette syntaxe avec CASE.

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Salut

    Je réouvre ce post car je n'ai pas pu avancer sur ma requete.

    C'est ok pour les sommes.

    Ce que j'essaie de faire c'est une requete incluant ces deux sommes pour chaque admID et d'autres informations d'autres tables faisant intervenir des jointures.

    J'ai essaye ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT 
           V1.admid, V2.optionValue , V3.admDate,
           sum(CASE V1.scid WHEN 2 THEN V1.value ELSE 0 END) AS value1,
           sum(CASE V1.scid WHEN 3 THEN V1.value ELSE 0 END) AS value2
    FROM  V1 inner join V2 on V1.admID = V2.admID
    inner join V3 on V2.admID = V3.admID
    GROUP BY admid
    mais j'obtient des lignes répétées un certian nombre de fois pour chaque admID..

    il manque quelque chose ?

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Je t'encourage à aller (re)lire le tutoriel de SQLPro sur les regroupements. Tu comprendras mieux pourquoi ta requête ne donne pas les résultats escomptés.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    J'ai lu le tuto mais je ne vois toujours pas ..

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    C'est tout le problème d'utiliser un SGBD qui n'implémente pas correctement la syntaxe du langage SQL ...

    Toutes les colonnes représentées hors des calculs d'agrégation doivent figurer dans la clause GROUP BY.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    le group by doit contenir les colonnes de la meme table surlaquelle on fait u nagrégat pas des autres ..ce que je fais

  13. #13
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY V1.admid, V2.optionValue , V3.admDate
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 225
    Points : 85
    Points
    85
    Par défaut
    Merci

    j'ai honte

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2008, 14h26
  2. requet sql sur une BD access
    Par k_boy dans le forum C++/CLI
    Réponses: 1
    Dernier message: 25/09/2007, 16h27
  3. PL-SQL sur une vue
    Par Mimile28 dans le forum SQL
    Réponses: 8
    Dernier message: 03/07/2007, 16h57
  4. [Vba-Excel] Exécuter une requete SQL sur une feuille de donnée
    Par Spacy_green dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/11/2006, 09h27
  5. Réponses: 23
    Dernier message: 19/09/2006, 11h33

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