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

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    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
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    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 actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    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 actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    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 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 : 39

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    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
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    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

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Tout d'abord merci pour vos réponses:

    HAZANOR, j'ai testé = même message d'erreur.

    WALDAR: dans ta soluce, j'apprends qu'on peut abréger le nom d'une table: c'est super pour 'éclaircir'. Mais cela ne me permet pas d'avoir mes 2 colonnes de "contrôle" qui sont getdate et date échéance.

    Je voudrais les avoir mais je dois mal comprendre le GROUP BY. J'ai lu le tutoriel trouvé sur le site. Mais je dois faire un 'blocage'.

    Mon idée 'humaine' = je veux une liste groupée par tiers (=Ct_Num), affichant le montant, la date du jour et la date d'échéance.
    Donc, pour moi, Group By ct_Num ... je comprends et je suis d'accord
    mais pourquoi devoir ajouter group by ct_Num, F_ECRITUREC.EC_ECHEANCE ??

    Je suis sûr que je fais une erreur de raisonnement, de compréhension du code SQL. Mais je ne pige pas laquelle ???

    Merci à vous
    Thib

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CT_Num, SUM(REGL_NON_ENCAISS) AS REGL_NON_ENCAISS	
    FROM   (SELECT FE.CT_Num, 
                   CASE
                      WHEN FE.CG_NumCont LIKE '51214%' 
                           AND FE.EC_Sens = '1' 
                           AND FE.EC_ECHEANCE >= CURRENT_TIMESTAMP
                         THEN FE.EC_Montant
                      ELSE 0
                   END AS REGL_NON_ENCAISS	
            FROM   dbo.F_ECRITUREC AS FE) AS T
    GROUP  BY CT_Num
    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/ * * * * *

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