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 :

pb Requete avec GROUP BY


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Par défaut pb Requete avec GROUP BY
    Salut à tous,

    j'ai fait deux requetes qui me cherchent le nombre de dossiers par groupe et ce dans deux tables.Pour les grouper dans un seul tableau j ai fait une UNION. Le pb est que je veux avoir le total de ts les dossiers. J'ai essayé de faire un select avec un SUM (cf requete ligne 1 ) mais ca marche pa ???

    ou est le pb SVP??

    merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select T1.[Closed Group:],sum([Incident #]) AS Dossier_NBR
    from 
    (SELECT T1.[Closed Group:],COUNT([Incident #]) AS Dossier_NBR
    FROM _SMDBA_.Incident T1 
    WHERE T1.[Open Date] >= convert(DATETIME,Convert(varchar(10), getDate(),103),103) GROUP BY T1.[Closed Group:])
     
     
    UNION
     
    (SELECT T1.[Closed Group:],COUNT([Work Order #]) Dossier_NBR
    FROM _SMDBA_.[Work Orders] T1
    WHERE T1.[Open Date] >= convert(DATETIME,Convert(varchar(10), getDate(),103),103)GROUP BY T1.[Closed Group:])

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select T1.[Closed Group:] AS Closed_Group, sum([Incident #]) AS Dossier_NBR
    from   (SELECT T1.[Closed Group:], COUNT([Incident #]) AS Dossier_NBR
            FROM   _SMDBA_.Incident T1
            WHERE  T1.[Open Date] >= CURRENT_TIMESTAMP
            GROUP BY T1.[Closed Group:]) AS T
    UNION ALL
    SELECT T1.[Closed Group:], COUNT([Work Order #])
    FROM   _SMDBA_.[Work Orders] T1
    WHERE  T1.[Open Date] >= CURRENT_TIMESTAMP
    GROUP  BY T1.[Closed Group:])
    Cea dit, que d'horreur dans votre base et votre requête :
    1) les noms des objets ne doivent comporter ni blanc ni signe de ponctuation (: # ...). SQL exige que les seuls caractères de composition des noms des tables, colonnes, etc soient des chiffres des lettres sans accents et le blanc souligne. Ne pas respecter cette règle ne peut que vous nuire un jour ou l'autre. A Lire : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L1
    2) si votre colonne "Open Date" est un type datetime, il est strictement inutile et idiot de transtyper la date obtenue par la commande GETDATE qui fournit une date, cela fait un double transtypage !
    3) Préférez utiliser la fonction CURRENT_TIMESTAMP à GetDate(). CURRENT_TIMESTAMP est la norme SQL et GetDate est spécifique à SQL Server.
    4) lorsque vous faites des sous requêtes en table dérivée, il faut un alias à la table ainsi décrite.
    5) lorsque vous faites des requêtes ensembliste il ne faut pas de parenthèses
    6) dans les opérations ensemblistes (UNION, INTERSECT, EXCEPT) lorsqu'il n'y a aucun doublons possible ou souhaité, il est important de faire un UNION ALL, sinon, le dédoublonnement pourra vous donner des résultats faux.

    Bref, je vous conseille fortement d'apprendre le SQL. C'est un vrai langage. Mon livre, comme mon site peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Par défaut
    Bonjour,

    merci mais je me suis trompée c'est plutot du TransactSQL et la BD est en SQLServer j'ai un code VBA qui execute la requete et donne le resultat dans une autre table...

    avec ces données je faisait marché d'autres requetes et ma base est bonne..

    merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT [Closed Group:] as Groupe,(sum([Incident #])) AS Dossier
    FROM 
    (SELECT [Closed GROUP:], COUNT([Incident #]) AS Dossier_NBR
            FROM   _SMDBA_.[Incident] 
            WHERE  [Open Date] >= CURRENT_TIMESTAMP
            GROUP BY [Closed Group:]
    UNION ALL
    SELECT [Closed GROUP:], COUNT([Work Order #]) AS Order_NBR
    FROM   _SMDBA_.[Work Orders] 
    WHERE  [Open Date] >= CURRENT_TIMESTAMP
    GROUP BY [Closed Group:])
    ca me me donne une erreur :
    Msg 102, Level 15, State 1, Line 12
    Incorrect syntax near ')'.
    ca n'accepte pas la ')' de la ligne dernière????

    Merci

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    Mettez un ALIAS

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT T1.[Closed Group:] as Groupe, SUM(T1.[Incident #]) AS Dossier
    FROM 
    (SELECT T1.[Closed Group:], COUNT(T1.[Incident #]) AS Dossier_NBR
            FROM   _SMDBA_.[Incident] T1
            WHERE  T1.[Open Date] = convert(DATETIME,Convert(varchar(10), getDate(),103),103)
            GROUP BY T1.[Closed Group:]
    UNION ALL
    SELECT T2.[Closed Group:], COUNT(T2.[Work Order #]) AS Order_NBR
         FROM   _SMDBA_.[Work Orders] T2
         WHERE  T2.[Open Date] = convert(DATETIME,Convert(varchar(10), getDate(),103),103)
         GROUP BY T2.[Closed Group:])

    et c'est le meme message d'erreur.
    Pensez vous qu'il faut utiliser la clause INTO pour mettre le resultat de UNION ALL dans une table résultat par exp??? sauf que je n'ai pas le droit d'en faire j'ai juste le droit de lecture((

    merci

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Une table dérivée (sous-requête utilisée dans la clause FROM) doit avoir un alias.
    Par ailleurs, les colonnes de T1 de sont pas visibles de la requête SELECT principale.
    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.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Une table dérivée (sous-requête utilisée dans la clause FROM) doit avoir un alias.
    Par ailleurs, les colonnes de T1 de sont pas visibles de la requête SELECT principale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT [Closed Group:] as Groupe, SUM([Incident #]) AS Dossier
    FROM 
    (SELECT T1.[Closed Group:], COUNT(T1.[Incident #]) AS Dossier_NBR
    FROM _SMDBA_.[Incident] T1
    WHERE T1.[Open Date] = convert(DATETIME,Convert(varchar(10), getDate(),103),103)
    GROUP BY T1.[Closed Group:]
    UNION ALL
    SELECT T2.[Closed Group:], COUNT(T2.[Work Order #]) AS Order_NBR
    FROM _SMDBA_.[Work Orders] T2
    WHERE T2.[Open Date] = convert(DATETIME,Convert(varchar(10), getDate(),103),103)
    GROUP BY T2.[Closed Group:])

    et c'est tj pareil((

  9. #9
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Non,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT [Closed GROUP:] AS Groupe,(sum([Incident #])) AS Dossier
    FROM 
    (SELECT [Closed GROUP:], COUNT([Incident #]) AS Dossier_NBR
            FROM   _SMDBA_.[Incident] 
            WHERE  [Open Date] >= CURRENT_TIMESTAMP
            GROUP BY [Closed GROUP:]
    UNION ALL
    SELECT [Closed GROUP:], COUNT([Work ORDER #]) AS Order_NBR
    FROM   _SMDBA_.[Work Orders] 
    WHERE  [Open Date] >= CURRENT_TIMESTAMP
    GROUP BY [Closed GROUP:]) T1


    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT [Closed GROUP:] AS Groupe,(sum([Incident #])) AS Dossier_NBR
    FROM 
    (SELECT [Closed GROUP:], COUNT([Incident #]) AS Dossier_NBR
            FROM   _SMDBA_.[Incident] 
            WHERE  [Open Date] >= CURRENT_TIMESTAMP
            GROUP BY [Closed GROUP:]
    UNION ALL
    SELECT [Closed GROUP:], COUNT([Work ORDER #]) AS Order_NBR
    FROM   _SMDBA_.[Work Orders] 
    WHERE  [Open Date] >= CURRENT_TIMESTAMP
    GROUP BY [Closed GROUP:]) T1


    là ce ne me reconnait plus ma colonne [Incident #] elle existe bien dans la base
    de plus le T1 dans la dernière ligne c'est pour renommer [Incident #]?? je l'ai déjà recnommé à la ligne 1????
    comprend plus(((

  11. #11
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Effectivement, comme tu as déjà renommé dans la table dérivée T1, tu dois reprendre cet ALIAS.

    Donc
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT sum(Dossier_NBR) 
    FROM 
    (SELECT [Closed Group:], COUNT([Incident #]) AS Dossier_NBR
            FROM   _SMDBA_.[Incident] 
            WHERE  [Open Date] >=  convert(DATETIME,Convert(varchar(10), getDate(),103),103)
            GROUP BY [Closed GROUP:]
    UNION ALL
    SELECT [Closed Group:] AS Groupe, COUNT([Work ORDER #]) AS Order_NBR
    FROM   _SMDBA_.[Work Orders] 
    WHERE  [Open Date] >=  convert(DATETIME,Convert(varchar(10), getDate(),103),103)
    GROUP BY [Closed Group:]) as T1
    et ça marcheeee))
    merci et bon weekend

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

Discussions similaires

  1. Probleme requete avec group by
    Par akabou dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/01/2008, 10h28
  2. PB : Requete avec group by ?
    Par vica6a dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/11/2007, 06h53
  3. Requete avec group by
    Par rico3434 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/10/2007, 20h36
  4. [Oracle] Requête avec GROUP BY
    Par bud_gw dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/07/2006, 10h26
  5. Requete avec group by
    Par zamilou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 31/03/2006, 08h37

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