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 :

[sql]Probleme avec une requete


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut [sql]Probleme avec une requete
    Bonjour,

    J'ai écrit la requete sql suivante pour obtenir les dossiers ouverts d'un coté et les fermés de l'autre par une personne donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT NAME AS Nom, COUNT([Seq.Open By]) AS Ouvert, COUNT([Seq.Closed By]) AS Ferme
    FROM MAGIC._SMDBA_.Incident, MAGIC._SMDBA_._PERSONNEL_
    WHERE MAGIC._SMDBA_.Incident.[Seq.Open By]=MAGIC._SMDBA_._PERSONNEL_.SEQUENCE and
    MAGIC._SMDBA_._PERSONNEL_.NAME='HENRY'
    GROUP BY NAME
    J'obtiens :
    Nom Ouvert Ferme
    HENRY 36 32

    Ensuite, j'ai fait dans le cas ouvert & ferme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Name AS Nom, COUNT(*) AS [Ouvert & Ferme]
    FROM    MAGIC._SMDBA_.Incident, MAGIC._SMDBA_._PERSONNEL_
    WHERE   [Seq.Open By] = [Seq.Closed By] and
    MAGIC._SMDBA_.Incident.[Seq.Open By] = MAGIC._SMDBA_._PERSONNEL_.SEQUENCE and
    MAGIC._SMDBA_._PERSONNEL_.NAME='HENRY'
    GROUP BY Name
    j'obtiens :
    Nom Ouvert & ferme
    HENRY 23

    Lorsque je regroupe tous ça dans la même reqûete, je n'obtiens pas le résultat souhaité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Name AS Nom, COUNT([Seq.Open By]) AS Ouvert, COUNT([Seq.Closed By]) AS Ferme, COUNT(*) AS [Ouvert & Ferme]
    FROM    MAGIC._SMDBA_.Incident, MAGIC._SMDBA_._PERSONNEL_
    WHERE   [Seq.Open By] = [Seq.Closed By] and
    MAGIC._SMDBA_.Incident.[Seq.Open By] = MAGIC._SMDBA_._PERSONNEL_.SEQUENCE and
    MAGIC._SMDBA_._PERSONNEL_.NAME='HENRY'
    GROUP BY Name
    J'obtiens :
    Nom Ouvert Ferme Ouvert & ferme
    HENRY 23 23 23

    Au lieu d'avoir 23,23,23 j'aimerai obtenir :36,32,23

    ESt-ce que quelqu'un pourrait m'indiquer ce que je dois modifier.

    Merci

  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
    11
    12
    13
    14
    15
    SELECT NAME AS Nom, 
           COUNT([Seq.Open BY]) AS Ouvert, 
           COUNT([Seq.Closed BY]) AS Ferme
           SUM(CASE  
                  WHEN [Seq.Open BY] = [Seq.Closed BY] THEN 1
                  ELSE 0
               END) AS OUVERT_FERME
     
    FROM   MAGIC._SMDBA_._PERSONNEL_ P
           INNER JOIN MAGIC._SMDBA_.Incident I
                 ON I.[Seq.Open BY] = P.SEQUENCE
     
    WHERE  P.NAME='HENRY'
     
    GROUP  BY NAME
    Au passage :
    1) évitez les noms d'objets contenant des blanc, des caractères diacritqiues ou signe de ponctuation. Un nom d'objet (table, colonne, etc) ne doit être composé que des 26 lettres de l'alphabet des 10 chiffres et du blanc souligné. Tout le reste est illicite et vous courrez au devant d'emmerdes compte tenu que bon nombre d'outil ne supporte pas ce gnere de fantaisies et que les crochets sont une spécificité propre à MS
    2) utilisez des jointures et évitez de faire vos jointures dans le where
    3) placez les tables dans le bon ordre
    4) évitez d'utiliser des mot réservés de SQL pour vos noms d'objet (BY) vous courrez à nouveau aux emmerdements !

    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
    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 manière d'obtenir ton résultat :
    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    NAME AS Nom
        ,     SUM(CASE WHEN [Seq.Open BY] IS NULL THEN 0 ELSE 1 END) AS Ouvert
        ,    SUM(CASE WHEN [Seq.Closed BY] IS NULL THEN 0 ELSE 1 END) AS Ferme
        ,    SUM(CASE WHEN [Seq.Open BY] IS NOT NULL AND [Seq.Closed BY] IS NOT NULL THEN 1 ELSE 0 END) AS Traite
    FROM     MAGIC._SMDBA_._PERSONNEL_    AS P
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS O
             ON    O.[Seq.Open BY] = P.SEQUENCE 
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS C
             ON    C.[Seq.Closed BY] = P.SEQUENCE 
    WHERE     P.NAME = 'HENRY'
    GROUP BY P.NAME
    ;
    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.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par al1_24
    Une manière d'obtenir ton résultat :
    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    NAME AS Nom
        ,     SUM(CASE WHEN [Seq.Open BY] IS NULL THEN 0 ELSE 1 END) AS Ouvert
        ,    SUM(CASE WHEN [Seq.Closed BY] IS NULL THEN 0 ELSE 1 END) AS Ferme
        ,    SUM(CASE WHEN [Seq.Open BY] IS NOT NULL AND [Seq.Closed BY] IS NOT NULL THEN 1 ELSE 0 END) AS Traite
    FROM     MAGIC._SMDBA_._PERSONNEL_    AS P
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS O
             ON    O.[Seq.Open BY] = P.SEQUENCE 
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS C
             ON    C.[Seq.Closed BY] = P.SEQUENCE 
    WHERE     P.NAME = 'HENRY'
    GROUP BY P.NAME
    ;
    J'obtiens comme message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Msg 209, Level 16, State 1, Line 1
    'Seq.Open By' : nom de colonne ambigu.
    Msg 209, Level 16, State 1, Line 1
    'Seq.Closed By' : nom de colonne ambigu.
    Msg 209, Level 16, State 1, Line 1
    'Seq.Open By' : nom de colonne ambigu.
    Msg 209, Level 16, State 1, Line 1
    'Seq.Closed By' : nom de colonne ambigu.
    Je fais mes requetes sur sql server.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par al1_24
    Une manière d'obtenir ton résultat :
    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    NAME AS Nom
        ,     SUM(CASE WHEN [Seq.Open BY] IS NULL THEN 0 ELSE 1 END) AS Ouvert
        ,    SUM(CASE WHEN [Seq.Closed BY] IS NULL THEN 0 ELSE 1 END) AS Ferme
        ,    SUM(CASE WHEN [Seq.Open BY] IS NOT NULL AND [Seq.Closed BY] IS NOT NULL THEN 1 ELSE 0 END) AS Traite
    FROM     MAGIC._SMDBA_._PERSONNEL_    AS P
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS O
             ON    O.[Seq.Open BY] = P.SEQUENCE 
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS C
             ON    C.[Seq.Closed BY] = P.SEQUENCE 
    WHERE     P.NAME = 'HENRY'
    GROUP BY P.NAME
    ;
    Ca fonctionne pour le cas du Ouvert & ferme mais pour ouvert seul et ferme seul, ça ne donne pas les bonnes valeurs

  6. #6
    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
    En effet, j'ai oublié de qualifier les colonnes dans le CASE :
    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    P.NAME AS Nom
        ,     SUM(CASE WHEN O.[Seq.Open BY] IS NULL THEN 0 ELSE 1 END) AS Ouvert
        ,    SUM(CASE WHEN C.[Seq.Open BY] IS NULL THEN 0 ELSE 1 END) AS Ferme
        ,    SUM(CASE WHEN O.[Seq.Open BY] IS NOT NULL AND C.[Seq.Open BY] IS NOT NULL THEN 1 ELSE 0 END) AS Traite
    FROM     MAGIC._SMDBA_._PERSONNEL_    AS P
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS O
             ON    O.[Seq.Open BY] = P.SEQUENCE 
        LEFT JOIN
            MAGIC._SMDBA_.Incident    AS C
             ON    C.[Seq.Closed BY] = P.SEQUENCE 
    WHERE     P.NAME = 'HENRY'
    GROUP BY P.NAME
    ;
    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.

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    J'ai modifié la requête sql car ça ne donnait pas les résultats qu'il me fallait, j'ai utilisé une autre table et j'ai du ajouter un nouvel attribut [Group Name].
    La requete sans l'ajout de [Group Name] fonctionne mais lorsque je l'ajoute, j'obtiens ce message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 8120, Level 16, State 1, Line 1
    La colonne 'I.Group Name' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    [Group Name] à la table MAGIC._SMDBA_.Incident
    Le code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT [Full Name] AS Nom,
    	   [Group Name] AS Equipe,  
           SUM(CASE  
                  WHEN [Seq.Assigned To] = [Seq.Open By] THEN 1
                  ELSE 0
               END) AS OUVERT,
    		SUM(CASE  
                  WHEN [Seq.Assigned To] = [Seq.Closed By] THEN 1
                  ELSE 0
               END) AS FERME,
    		SUM(CASE  
                  WHEN [Seq.Open By] = [Seq.Closed By] THEN 1
                  ELSE 0
               END) AS OUVERT_FERME
     
    FROM   MAGIC._SMDBA_.[Groups Details] G
           INNER JOIN MAGIC._SMDBA_.Incident I
                 ON I.[Seq.Assigned To] = G.[Seq.SupportStaff]
     
    WHERE  G.[Full Name]='Pascal HENRY' AND (I.[Close Date & Time] BETWEEN '20070607 00:00:00.000' AND '20070607 19:00:00.000')
    AND I.[Group Name]='EHSFAC-SERVICEDESK2'
     
    GROUP  BY [Full Name]

  8. #8
    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
    Le message est explicite...
    [GROUP Name] doit être ajouté à la clause GROUP BY

    Au passage, quelle horreur que ces noms de colonnes avec des espaces ou des points !!!
    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.

  9. #9
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par al1_24
    Au passage, quelle horreur que ces noms de colonnes avec des espaces ou des points !!!
    Ce n'est pas moi qui crée les tables

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

Discussions similaires

  1. Probleme avec une requete sql
    Par kraven30 dans le forum Requêtes
    Réponses: 8
    Dernier message: 01/02/2011, 16h47
  2. probleme avec une requete de [sql synthese 2 edition]
    Par chady dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/11/2009, 09h05
  3. probleme avec une requete SQL
    Par univermina dans le forum ASP
    Réponses: 20
    Dernier message: 07/06/2009, 22h24
  4. Probleme avec une requete sql dans VB6 pour un champ date
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2009, 08h31
  5. probleme avec une requete sql
    Par kroma23 dans le forum Bases de données
    Réponses: 18
    Dernier message: 10/01/2009, 14h28

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