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

MS SQL Server Discussion :

Erreur: '-' in expression is not part of the query"


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut Erreur: '-' in expression is not part of the query"
    Bonjour à tous, j'ai besoin encore une fois de votre preciouse aide...

    Voilà ma requete:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT     dbo.DRH_T_formations.id_theme, MIN(dbo.DRH_T_dates.date_formation) AS date_ini, dbo.DRH_T_formations.nom_formation, 
                          dbo.DRH_T_organismes.nom_organisme, dbo.DRH_T_calendrier.deductible, dbo.DRH_T_calendrier.categorie, dbo.DRH_T_participants.mec, 
                          dbo.DRH_T_histoire.categorie AS Expr1, dbo.DRH_T_histoire.date_debut, dbo.DRH_T_histoire.date_fin
     
    FROM         dbo.DRH_T_histoire RIGHT OUTER JOIN
                          dbo.DRH_T_participants ON dbo.DRH_T_histoire.mec = dbo.DRH_T_participants.mec RIGHT OUTER JOIN
                          dbo.DRH_T_calendrier ON dbo.DRH_T_participants.id_calendrier = dbo.DRH_T_calendrier.id_calendrier LEFT OUTER JOIN
                          dbo.DRH_T_formations ON dbo.DRH_T_calendrier.id_formation = dbo.DRH_T_formations.id_formation LEFT OUTER JOIN
                          dbo.DRH_T_organismes ON dbo.DRH_T_calendrier.id_organisme = dbo.DRH_T_organismes.id_organisme LEFT OUTER JOIN
                          dbo.DRH_T_dates ON dbo.DRH_T_calendrier.id_calendrier = dbo.DRH_T_dates.id_calendrier
    GROUP BY dbo.DRH_T_dates.date_formation, dbo.DRH_T_formations.id_theme, dbo.DRH_T_formations.nom_formation, 
                          dbo.DRH_T_organismes.nom_organisme, dbo.DRH_T_calendrier.categorie, dbo.DRH_T_calendrier.deductible, dbo.DRH_T_calendrier.id_formation, 
                          dbo.DRH_T_participants.mec, dbo.DRH_T_histoire.categorie, dbo.DRH_T_histoire.date_debut, dbo.DRH_T_histoire.date_fin
    HAVING      (YEAR(dbo.DRH_T_dates.date_formation) = 2010)

    que marche bien.

    Mon problème c'est qui je ne veux les collaborateurs dont la date_debut est inferieur à ma date_ini et la date_fin est superieur à date_ini
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    MIN(dbo.DRH_T_dates.date_formation) AS date_ini

    Lorsque je commence à écrire (dans le "criteria pane"): "dbo.DRH_T_histoire.date_debut< date_ini", j'ai le message "'date_ini' in expression is not part of the query"

    Est-ce que vous pouvez m'aider encore une fois, svp?
    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    N'écrivez pas vos requêtes avec cet outil.
    Ecrivez-les dans une fenêtre de requête : vous savez exactement ce que vous faites, et vous pouvez sauvegarder facilement le script.

    Vous vous êtes trompé dans votre clause HAVING, et vous pouvez filtrer directement votre requête.
    En revanche vous devez utilier HAVING pour faire ce que vous voulez :

    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
    24
    25
    26
    27
    28
    29
    SELECT		F.id_theme
    		, MIN(D.date_formation) AS date_ini
    		, F.nom_formation
    		, O.nom_organisme
    		, C.deductible
    		, C.categorie
    		, P.mec
    		, H.categorie AS Expr1
    		, H.date_debut
    		, H.date_fin 
    FROM		dbo.DRH_T_histoire AS H
    RIGHT JOIN	dbo.DRH_T_participants AS P ON H.mec = P.mec
    RIGHT JOIN	dbo.DRH_T_calendrier AS C ON P.id_calendrier = C.id_calendrier
    LEFT JOIN	dbo.DRH_T_formations AS F ON C.id_formation = F.id_formation
    LEFT JOIN	dbo.DRH_T_organismes AS O ON C.id_organisme = O.id_organisme
    LEFT JOIN	dbo.DRH_T_dates AS D ON C.id_calendrier = D.id_calendrier
    WHERE		D.date_formation > '20100101'
    GROUP BY	D.date_formation
    		, F.id_theme
    		, F.nom_formation
    		, O.nom_organisme
    		, C.categorie
    		, C.deductible
    		, C.id_formation
    		, P.mec
    		, H.categorie
    		, H.date_debut
    		, H.date_fin
    HAVING		MIN(D.date_formation) BETWEEN H.date_debut AND H.date_fin
    @++

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut
    Merci beaucoup elsuket.

    L'erreur était le "date_ini" de ma clause HAVING, il faudrait utiliser "MIN(date_formation)", malgré le fait d'avoir nomé MIN(date_formation) AS date_ini.

    Pour l'editeur de requete, je l'utilise parce que je n'ai pas trop de confiance en ecrire les jointures des tables (où mettre des parenteses, etc).

    En tout cas c'est RESOLU.
    Merci encore une fois.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    L'erreur était le "date_ini" de ma clause HAVING, il faudrait utiliser "MIN(date_formation)", malgré le fait d'avoir nomé MIN(date_formation) AS date_ini.
    En effet, la clause HAVING ne peut porter que sur une fonction d'agrégat.
    En général, n'utilisez les alias de colonne qu'avant le FROM de la requête.

    Pour l'editeur de requete, je l'utilise parce que je n'ai pas trop de confiance en ecrire les jointures des tables (où mettre des parenteses, etc).
    La documentation de SQL Server, téléchargeable et consultable depuis les liens dans ma signature sont là pour vous les détailler.
    Ce n'est pas avec l'outil que vous apprendrez à écrire de bonnes requêtes, et par là même un bon modèle de données.
    C'est en forgeant qu'on devient forgeron, donc si vous écrivez vous-même les requêtes, vous savez exactement ce qu'elles font
    Ce n'est pas toujours le cas avec l'outil

    Et quand vous êtes planté, il y a ce forum

    @++

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Par défaut
    Merci pour les liens, lorsque j'aurais un peu (pas trop peu) de temps je vais les lire.

    Concernant la clause HAVING, il a été la preière fois qui je l'ai vu au même temps que la clause WHERE...

    Bon, A+ et merci encore une fois pour toute(s) l(es) aide(s)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/03/2011, 23h27
  2. Réponses: 2
    Dernier message: 11/03/2010, 18h58
  3. Réponses: 5
    Dernier message: 08/08/2007, 16h51
  4. Could not find a part of the path
    Par Poussy-Puce dans le forum ASP.NET
    Réponses: 5
    Dernier message: 02/02/2007, 19h56
  5. Réponses: 3
    Dernier message: 23/01/2006, 16h29

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