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

Développement SQL Server Discussion :

syntaxe incorrecte avec mon getdate et Group By


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 685
    Par défaut syntaxe incorrecte avec mon getdate et Group By
    Bonjour,

    Je ne suis pas un pro de SQL 2000. J'ai besoin d'extraire des écritures d'une base comptable que si la date d'échéance est supérieure ou égale à la date du jour de l'extraction.
    J'ai cherché et j'ai trouvé la fonction GETDATE mais je n'arrive pas à l'utiliser correctement. J'ai essayé de rajouter des parenthèses, de déplacer la fonction GETDATE.... je n'y comprends plus rien.

    Pouvez-vous me dire en quoi je cafouille ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare @date DATETIME
    SELECT  CT_Num, 
     
    SUM(CASE WHEN (dbo.F_ECRITUREC.CG_NumCont LIKE '51214%' AND dbo.F_ECRITUREC.EC_Sens='1' 
    AND dbo.F_ECRITUREC.EC_ECHEANCE >= CONVERT DATE(GETDATE())
    THEN (F_ECRITUREC.EC_Montant) ELSE 0 END) AS REGL_NON_ENCAISS
     
    FROM     F_ECRITUREC
    /*WHERE 	(F_ECRITUREC.CG_Num LIKE '5121%') */
     
    GROUP BY 	 F_ECRITUREC.CT_Num
    ORDER BY 	F_ECRITUREC.CT_Num
    Merci pour votre aide
    Thibault

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    GETDATE() vous renvoie déjà une date. Pas la peine d'essayer de le convertir.
    Votre colonne F_ECRITUREC.EC_ECHEANCE est-elle au format date (smalldatetime, datetime, timestamp etc.) ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 685
    Par défaut
    dans la colonne EC_Echeance, j'ai, par exemple :

    2008-12-10 00:00:00

    Elle est typée en smalldatetime, Null.

    Si je ne la convertie pas, cela ne risque pas de fausser mon test ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 685
    Par défaut
    je viens de trouver : il me manquait une parenthèse près le troisième AND. Par contre pour m'assurer du résultat, j'ai ajouté une colonne getdate, et ec_echeance.
    Pour cette dernière, il me dit :
    Serveur*: Msg 8120, Niveau 16, État 1, Ligne 2
    La colonne 'F_ECRITUREC.EC_Echeance' 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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  CT_Num, 
     
    SUM(CASE WHEN (dbo.F_ECRITUREC.CG_NumCont LIKE '51214%' AND dbo.F_ECRITUREC.EC_Sens='1' 
    AND (dbo.F_ECRITUREC.EC_ECHEANCE) >= GETDATE())
    THEN (F_ECRITUREC.EC_Montant) ELSE 0 END) AS REGL_NON_ENCAISS,
    Getdate(),(dbo.F_ECRITUREC.EC_ECHEANCE)
     
    FROM     F_ECRITUREC
    GROUP BY      F_ECRITUREC.CT_Num
    ORDER BY     F_ECRITUREC.CT_Num
    Je ne comprends pas ! Je ne veux pas pas grouper par date d'échéance, juste par CT_Num.

    Qui peut m'expliquer ce qu'il veut ?

    Merci encore
    Thibault

  5. #5
    Membre très actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Par défaut
    Essayer avec la modification de positions de parenthèses: parenthèse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  CT_Num, 
     
    SUM(CASE WHEN ((dbo.F_ECRITUREC.CG_NumCont LIKE '51214%' )AND (dbo.F_ECRITUREC.EC_Sens='1') 
    AND (dbo.F_ECRITUREC.EC_ECHEANCE >= GETDATE()))
    THEN (F_ECRITUREC.EC_Montant) ELSE 0 END) AS REGL_NON_ENCAISS,
    Getdate(),(dbo.F_ECRITUREC.EC_ECHEANCE)
     
    FROM     F_ECRITUREC
    GROUP BY      F_ECRITUREC.CT_Num
    ORDER BY     F_ECRITUREC.CT_Num

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Déjà bien formatter son code ça permet d'éviter la plupart des erreurs de syntaxe.

    Ensuite soyez sûr de ce que vous faites, ces deux phrases ne peuvent pas coexister :
    Par contre pour m'assurer du résultat, j'ai ajouté une colonne getdate, et ec_echeance.
    Je ne veux pas pas grouper par date d'échéance, juste par CT_Num
    Essayez la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
        FE.CT_Num, 
        SUM(CASE
              WHEN (FE.CG_NumCont LIKE '51214%' AND FE.EC_Sens = '1' AND FE.EC_ECHEANCE >= GETDATE())
              THEN FE.EC_Montant
              ELSE 0
            END) AS REGL_NON_ENCAISS	
    FROM     dbo.F_ECRITUREC AS FE
    GROUP BY FE.CT_Num
    ORDER BY FE.CT_Num ASC

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2013, 09h47
  2. Réponses: 2
    Dernier message: 22/02/2013, 10h46
  3. Problème avec les sections de groupe de mon DataReport
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 20/11/2007, 12h12
  4. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

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