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

Requêtes et SQL. Discussion :

requête avec cumul : est-ce possible ? [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut requête avec cumul : est-ce possible ?
    bonjour

    j'ai une table issue d'une jointure qui a 2 champs : opération et pourcentage

    opération - pourcentage
    ope titi - 15,95
    ope truc - 14,20
    ope aaa - 7,09
    ope zzz


    etc..

    la somme des pourcentage fait 100. cette table est triée par pourcentage décroissant.

    je dois faire une requête qui, pour chaque ligne, calcule un "offset" qui est égal au cumul des pourcentages des lignes précédentes

    ope titi - 0
    ope truc - 15,95
    ope aaa - 30,15
    ope zzz - 37,24

    je serais très reconnaissante à celui ou celle qui aurait une idée;

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Il faut pour cela faire une petite requete imbriquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select *, (select sum(monchamp) from matable b where b.id<a.id) as cumul from matable a
    Comme les 2 requetes sont sur la même table les alias a et b permettent de les distinguer

  3. #3
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Bonjour,

    Il faut pour cela faire une petite requete imbriquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select *, (select sum(monchamp) from matable b where b.id<a.id) as cumul from matable a
    Comme les 2 requetes sont sur la même table les alias a et b permettent de les distinguer
    merci pour cette réponse rapide. je n'arrive pas à mettre en place cette solution car je n'ai pas d'id

    est-ce que je peux ajouter un champ ID dans ma jointure ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  t1.ope_str, t1.max_ipr, (t1.max_ipr/total_ipr)*100 AS pourcentage
    FROM max_rpn_ope AS t1, total_rpn_ope
    ORDER BY max_ipr DESC;
    dans la table total_rpn_ope, j'ai la somme des max_ipr

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    "id" est en l'occurence sur champ sur lequel doit se faire le classement

    Un champ numérique est préférable car en texte, "op 10" < "ope 2"

    Mais ce peut être aussi 1*mid(opération,5) ou toute autre formule ad-hoc

  5. #5
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    j'ai oublié de préciser que les opération sont des libellés quelconques et qi'pn ne peut pas s'en servir pour le tri

    ope titi - 15,95
    ope truc - 14,20
    ope aaa - 7,09
    ope zzz

    bref, je n'ai pas d'ID

    y'a pas moyen d'avoir unf fonction style row_num ?

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 386
    Points : 19 809
    Points
    19 809
    Billets dans le blog
    66
    Par défaut
    Salut,

    Pourquoi ne pas enregistrer cette requête:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  t1.ope_str, t1.max_ipr, (t1.max_ipr/total_ipr)*100 AS pourcentage
    FROM max_rpn_ope AS t1, total_rpn_ope
    ORDER BY max_ipr DESC;

    sous 1 nom, ex. "LaRequete" et après tu utilises le champ pourcentage comme ID, en reprenant la requête de Nico:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select *, (select sum(Pourcentage) from LaRequete b where b.Pourcentage>a.Pourcentage) as cumul from LaRequete a

    A+

  7. #7
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    hmmm, le problème, c'est que je peux avoir des opérations avec le même pourcentage :
    ope titi - 15,95
    ope truc - 14,20
    ope aaa - 7,09
    ope zzz - 7,09
    ope iiii - 7,09
    ope aab - 6,99

    du coup, je ne peux pas utiliser le pourcentage

  8. #8
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Les trier par % croissant ou décroissant était pourtant une bonne idée...

    Autre solution : ajouter un champ NumAuto dans la table des opérations

    En dernier recours, trier sur le nom des opérations (j'espère qu'il n'y en a jamais 2 du même nom ?)

    Dans tous les cas il faut pouvoir trier sur qqch

  9. #9
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Les trier par % croissant ou décroissant était pourtant une bonne idée...

    Autre solution : ajouter un champ NumAuto dans la table des opérations

    En dernier recours, trier sur le nom des opérations (j'espère qu'il n'y en a jamais 2 du même nom ?)

    Dans tous les cas il faut pouvoir trier sur qqch
    j'aimerais bien ajouter un champ numauto mais comment faire ?

  10. #10
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    j'ai trouvé

    j'ai pu ajouter une clé par opération et du coup, ça fonctionne nickel

    SELECT t4.id, t4.ope_str, t4.max_ipr, t4.pourcentage, (select sum(t5.pourcentage) from max_rpn_ope_pourcentage as t5 where (t5.max_ipr > t4.max_ipr) or (t5.max_ipr = t4.max_ipr and t5.id > t4.id) ) AS offset
    FROM max_rpn_ope_pourcentage AS t4;
    Merci pour votre aide.

    Christine

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

Discussions similaires

  1. Besoin de transaction avec TableAdapter -> Est-ce Possible?
    Par Thor Tillas dans le forum Accès aux données
    Réponses: 4
    Dernier message: 18/03/2008, 10h38
  2. Autocompletion avec swing, est ce possible ?
    Par icicmoi dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 12/07/2007, 08h13
  3. appli web avec Swing, est-ce possible ?
    Par chris35 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 25/10/2006, 11h03
  4. count() avec prédicat : est-ce possible ?
    Par TOM-Z dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 06/03/2006, 14h14
  5. Problème de requête avec cumul des conditions sur un champ
    Par UtopieAmbiante dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2006, 10h52

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