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 de syntaxe CASE WHEN


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Février 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 20
    Par défaut Pb de syntaxe CASE WHEN
    Bonjour,

    Je souhaite créer une colonne calculée.
    J'ai des factures et des encaissements qui sont lettrés.
    J'ai fait une clé "Compte_Client + Lettre"
    Si la clé est la même pour une pièce de type facture et une autre pièce qui n'est PAS une facture, je veux ramener la date la plus lointaine de cette autre pièce, dans mon exemple ci-dessous "27/12/19".
    Ex :
    Clé Type de pce Compte_Client Num_Pce Lettrage Date
    C0040 - K ENC C0040 A1903 K 15/12/19
    C0040 - K FAC C0040 A1901 K 27/12/19

    Je bloque totalement sur le code.
    J'ai fait cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CASE 
    		WHEN (
    				(Cle)
    				AND Type_Pce = 'FAC'
    				) = (
    				(Cle)
    				AND Type_Pce <> 'FAC'
    				)
    			THEN '1'
    		ELSE '0'
    		END
    Ce qui me donne cette erreur :
    Msg*156, Niveau*15, État*1, Ligne*1
    Syntaxe incorrecte vers le mot clé 'CASE'.

    Ce qui me semble normal puisque la condition liée à ma clé est bancale.

    J'apprends seule SQL server, je vous remercie par avance pour votre aide.

  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
    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MIN(Date)
    FROM   MaTable AS T1
           LEFT OUTER JOIN MaTable AS T2 
              ON T1.Cle = T2.Cle AND T2.Type_de_pce <> 'FAC'
    WHERE  T1.Type_de_pce = 'FAC'
    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 averti
    Femme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Février 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 20
    Par défaut
    J'ai édité mon code pour plus de clarté

    Je te remercie, on va en fait créer deux tables temporaires et les lier ?

    Ma table s'appelle GACCENTRYD.
    Mais quand je passe le code (avec les vrais noms), j'ai cette erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	SELECT MAX(Date)
    FROM   GACCENTRYD AS T1
           LEFT OUTER JOIN GACCENTRYD AS T2 
              ON (T1.BPR_0 + '-' + T1.MTC_0) = (T2.BPR_0 + '-' + T2.MTC_0) AND T2.TYP <> 'FAC'
    WHERE  T1.TYP = 'FAC'
    Erreur :
    Msg*208, Niveau*16, État*1, Ligne*15
    Nom d'objet 'GACCENTRYD' non valide.


    Saurais-tu pourquoi ?

    Je te remercie par avance,

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    bonjour,

    êtes vous sûre d'être connectée à la bonne base ? (et non sur la base master par défaut) ?
    sinon la table est peut-être sur un autre schéma que le schéma par défaut.
    ou vous l'avez mal écrite !

    au passage, remplacez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ON (T1.BPR_0 + '-' + T1.MTC_0) = (T2.BPR_0 + '-' + T2.MTC_0) AND T2.TYP <> 'FAC'
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ON T1.BPR_0  = T2.BPR_0
    AND T1.MTC_0 = T2.MTC_0
    AND T2.TYP <> 'FAC'
    Vous ne pourrez qu'améliorer les performances.

  5. #5
    Membre averti
    Femme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Février 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 20
    Par défaut
    Bonjour,

    Je vous remercie, j'ai bien regardé et compris comment je devais nommer mes tables pour les alias.

    J'ai un nouveau problème avec un message, je ne sais pas l'interpréter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT MAX(GACCENTRYD.ACCDAT_0)
    FROM   C.GACCENTRYD AS T1
           LEFT OUTER JOIN C.GACCENTRYD AS T2 
              ON T1.BPR_0  = T2.BPR_0
    AND T1.MTC_0 = T2.MTC_0
    AND T2.TYP_0 <> 'FAC'
    WHERE  T1.TYP_0 = 'FAC'
    Erreur :
    L'identificateur en plusieurs parties "GACCENTRYD.ACCDAT" ne peut pas être lié.


    Si je lui demande plus simple (la date comptable d'une pièce en particulier), ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ACCDAT_0 from C.GACCENTRYD
    WHERE  GACCENTRYD.NUM_0 = 'A1905ODG00126'
    Il y a qqch qui ne va pas dans le FROM, mais quoi ?

    Je vous remercie par avance pour votre aide

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Puisque vous avez affecté un alias T1 pour la table, essayez en remplaçant SELECT MAX(GACCENTRYD.ACCDAT_0) par SELECT MAX(T1.ACCDAT_0)

Discussions similaires

  1. [TSQL] Pb de syntaxe avec CASE WHEN & REPLACE
    Par Ahinha dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/01/2020, 16h30
  2. [Débutant] Case WHEN - erreur de syntaxe
    Par Domi2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/11/2015, 11h35
  3. Problème de syntaxe avec CASE WHEN
    Par Lord_Chesseling dans le forum Langage SQL
    Réponses: 17
    Dernier message: 26/01/2015, 21h08
  4. Syntaxe CASE WHEN
    Par Massiba dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/09/2013, 07h48
  5. Syntaxe SELECT CASE WHEN avec Microsoft.ACE.OLEDB.12.0
    Par kluh dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/12/2010, 09h59

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