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

Oracle Discussion :

création d'une requete sql


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Points : 29
    Points
    29
    Par défaut création d'une requete sql
    bonjour a tous
    dans ma base j'ai 4champs (id,projet, tache, temps-Exec)
    je veut faire une requete
    qui m'affiche une seul fois le projet et la tache et la somme de temps-Exec correspondant a ce prejet a cette tache
    je crois qu'on peut utiliser distinct non?
    sinon quelqu'un aurait un exemple a me proposer qui pourait m'aider
    merci a tous

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT projet, tache, sum(temps)
    FROM TATABLE
    GROUP BY projet, tache
    Le DISTINCT sert à n'afficher qu'une seule fois les lignes identiques.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Points : 82
    Points
    82
    Par défaut
    bjr... essaye cette requête :
    tu dis que dans ta base tu as 4champs !! donc je n'ai pas compris est-ce que tu veux dires que tu as 4 tables ou bien tu as une table avec 4 champs? donc je suppose que tu as une table avec les 4 champs que tu as cités, sur cette hypothèse, voici la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select projet,sum(temps-Exec) from <le nom_table> group by projet;
    cordialement.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Ce serait plus simple de répondre à ta demande avec:
    - la description de la ou des table(s) concernées
    - quelques données
    - et 2/3 exemples de ce que la requête devrait retourner.
    Merci.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Points : 29
    Points
    29
    Par défaut
    ok voila un exemple
    j'ai une table X avec 4 chanmps X(A,B,C,D)
    dedans on a :
    a1,b1,c1,0
    a2,b2,c1,11
    a3,b1,c1,2
    a4,b2,c1,10
    a5,b1,c1,3

    le resultat de la requete devrait afficher
    b1,c1,5
    b2,c1,21


    j'éspére que c'est plus claire.

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Si la table s'appelle test, la requête est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select b,c, sum (d) 
    from test
    group by b,c;

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Points : 29
    Points
    29
    Par défaut
    ok maintenant le compliquer cest le sum

    la requet qui fait le sum pour moi elle existe, je l'est déja fait et elle fonctionne bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_CHAR(TRUNC(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss'))/3600)) || ':' || TO_CHAR(TRUNC(MOD(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss')), 3600)/60)) || ':' || TO_CHAR(MOD(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss')), 60)) FROM works
    mais ma requete global ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select user_wor,name_pro, name_tas, name_sta,TO_CHAR(TRUNC(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss'))/3600)) || ':' || TO_CHAR(TRUNC(MOD(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss')), 3600)/60)) || ':' || TO_CHAR(MOD(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss')), 60)) FROM works GROUP BY name_pro, name_tas
    un coup de main

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Points : 29
    Points
    29
    Par défaut
    l'erreur est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Not a group by expression

  9. #9
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Les colonnes sélectionnées dans un SELECT avec clause GROUP BY doivent:
    - soit être dans la clause GROUP BY
    - soit être calculées avec une function d'agrégat (SUN, AVG, MIN, MAX)

    Ce n'est pas le cas pour user_wor et name_sta.

  10. #10
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    SI on revient à l'exemple simplifié, il y a moyen d'afficher la colonne A en utilisant les fonctions analytiques qui calculent des agrégats avec plus de possibilité que le GROUP BY:

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select a, b, c, sum (d) over (partition by b, c)  
    from test
     
    A          B          C          SUM(D)OVER(PARTITIONBYB,C)
    ---------- ---------- ---------- --------------------------
    a1         b1         c1                                  5
    a3         b1         c1                                  5
    a5         b1         c1                                  5
    a2         b2         c1                                 21
    a4         b2         c1                                 21
     
    5 rows selected.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Points : 29
    Points
    29
    Par défaut
    alors dans une requete avec Group By
    on ne peut pas avoir dans le select un champ qui ne fasse partie du group by
    comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select a,b,c,e, sum (d) 
    from test 
    group by b,c;

  12. #12
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Oui. C'est ça.

    Sinon tu peux essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select min(a), b, c, avg(e), sum (d) 
    from test 
    group by b,c;
    Mais ce n'est pas ce que tu veux calculer ...

    Je conseille les fonctions analytiques: c'est plus compliqué que group by mais plus puissant et souvent plus efficace. Les fonctions analytiques font partie d'un des derniers standard SQL.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Points : 29
    Points
    29
    Par défaut
    j'ai fait comme t'a dit avec le partition


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select user_wor,name_pro, name_tas, name_sta,TO_CHAR(TRUNC(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss'))/3600)) || ':' || TO_CHAR(TRUNC(MOD(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss')), 3600)/60)) || ':' || TO_CHAR(MOD(SUM(TO_CHAR(to_date(total_wor, 'HH24:MI:ss'),'sssss')), 60)) over (partition by user_wor,name_pro, name_tas)  FROM works
    mais il me donne une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    From keyword not found where expected
    une idée??

  14. #14
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il faut considérer "sum(x) over (partition by y,z)" comme le nom d'une colonne si on fait des calculs sur sum(x):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select a, b, c,  mod(sum(d) over (partition by b, c), 5) from test
     
    A          B          C          MOD(SUM(D)OVER(PARTITIONBYB,C),5)
    ---------- ---------- ---------- ---------------------------------
    a1         b1         c1                                         0
    a3         b1         c1                                         0
    a5         b1         c1                                         0
    a2         b2         c1                                         1
    a4         b2         c1                                         1
     
     
    alors que:
     
    select a, b, c,  mod(sum(d),5) over (partition by b, c) from test
    génère l'erreur de syntaxe que tu as.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Points : 29
    Points
    29
    Par défaut
    "génère l'erreur de syntaxe que tu as." ca veut dire quoi??

  16. #16
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    ça veut dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> select a, b, c,  mod(sum(d),5) over (partition by b, c) from test;
    select a, b, c,  mod(sum(d),5) over (partition by b, c) from test
                                   *
    ERROR at line 1:
    ORA-00923: FROM keyword not found where expected
     
     
    SQL>

Discussions similaires

  1. [AC-2010] une date change quand je bascule de sql en mode création dans une requete
    Par idiot dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/06/2011, 07h52
  2. Réponses: 6
    Dernier message: 25/10/2010, 14h27
  3. Problème création d'une requete SQL (categorie,sous-cat)
    Par Raideman dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/11/2006, 15h23
  4. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51
  5. Une requete SQL unpeux difficile !!
    Par nil dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/03/2004, 12h32

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