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

Requêtes MySQL Discussion :

MySQL+Dolibarr+Excel Query : Problème de syntaxe avec la fonction CASE


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut MySQL+Dolibarr+Excel Query : Problème de syntaxe avec la fonction CASE
    Configuration :
    - Dolibarr 6.0.5
    - MySQL Connector/ODBC 5.2.7 (32 bits)
    - Microsoft Excel 2013 (15.0.5031.1000) 32 bits
    - Microsoft Query (15.0.4869.1000) 32 bits

    Bonjour,

    Dans ma requête SQL ci-dessous, je n'arrive pas à insérer une fonction 'CASE', pourriez-vous m'aider, s'il vous plaît.

    Merci.

    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
    SELECT
             llx_product_0.ref                                                                               AS 'REF ALS'
           , llx_product_0.label                                                                             AS 'DESIGNATION ALS'
           , llx_societe_0.nom                                                                               AS 'NOM FOURNISSEUR'
           , llx_product_fournisseur_price_0.ref_fourn                                                       AS 'REF FOURNISSEUR'
           , llx_product_0.stock                                                                             AS 'STOCK REEL'
           , llx_product_0.seuil_stock_alerte                                                                AS 'STOCK SECU'
           , llx_product_0.desiredstock                                                                      AS 'STOCK DESIRE'
           , (llx_product_fournisseur_price_0.unitprice/llx_multicurrency_rate_0.rate)                       AS 'PRIX UNITAIRE'
           , REPLACE(llx_commande_fournisseur_dispatch_0.comment,"Réception de la commande fournisseur ","") AS 'NUMERO CMD'
           , llx_commande_fournisseur_dispatch_0.qty                                                         AS 'QUANTITE CMD'
           , llx_commande_fournisseur_0.fk_statut                                                            AS 'STATUT CMD'
    FROM
             ZenERP.llx_commande_fournisseur          llx_commande_fournisseur_0
           , ZenERP.llx_commande_fournisseur_dispatch llx_commande_fournisseur_dispatch_0
           , ZenERP.llx_multicurrency_rate            llx_multicurrency_rate_0
           , ZenERP.llx_product                       llx_product_0
           , ZenERP.llx_product_fournisseur_price     llx_product_fournisseur_price_0
           , ZenERP.llx_societe                       llx_societe_0
    WHERE
             llx_product_0.rowid                                = llx_product_fournisseur_price_0.fk_product
             AND llx_societe_0.rowid                            = llx_product_fournisseur_price_0.fk_soc
             AND llx_multicurrency_rate_0.fk_multicurrency      = llx_societe_0.fk_multicurrency
             AND llx_commande_fournisseur_dispatch_0.fk_product = llx_product_0.rowid
             AND llx_commande_fournisseur_0.rowid               = llx_commande_fournisseur_dispatch_0.rowid
    ORDER BY
             (llx_product_fournisseur_price_0.unitprice/llx_multicurrency_rate_0.rate) DESC
    Voici le code 'CASE' que j'aimerais insérer dans ma requête ci-dessus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CASE llx_commande_fournisseur_0.fk_statut
    WHEN '0' THEN 'BROUILLON'
    WHEN '1' THEN 'VALIDE'
    WHEN '2' THEN 'APPROUVE'
    WHEN '3' THEN 'ENVOYE AU FOURNISSEUR'
    WHEN '4' THEN 'RECU EN PARTIE'
    WHEN '5' THEN 'RECU COMPLETEMENT OU FERME'
    WHEN '9' THEN 'REFUSE'
    ELSE 'INCONNU'
    END AS 'STATUT'

  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 009
    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 009
    Billets dans le blog
    6
    Par défaut
    1) CASE n'est pas une fonction, mais un opérateur

    2) un identifiant SQL n'est pas une chaine de caractères (donc pas d'apostrophe) et doit ne pas contenir de blanc. S'il contient des caractères parasite il risque de ne pas être interprété correctement dans d'autres programmes....
    À lire : https://sqlpro.developpez.com/cours/...age=partie1#L1
    Exemple :
    est incorect
    est correct
    Au pire vous pouvez l'entourer de guillemets
    mais il restera toujours un risque...

    3) une chaine de caractères est délimité par des apostrophes et non des guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Réception de la commande fournisseur "
    est incorrect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Réception de la commande fournisseur '
    est correct

    4) les jointures se font avec le mot clef JOIN et un prédicat ON (depuis 1992... )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FROM
             ZenERP.llx_commande_fournisseur          llx_commande_fournisseur_0
    ...
    WHERE
    ...
             AND llx_commande_fournisseur_0.rowid               = llx_commande_fournisseur_dispatch_0.rowid
    Illisible !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM     ZenERP.llx_commande_fournisseur               AS CF
             JOIN ZenERP.llx_commande_fournisseur_dispatch AS CFD ON CF.rowid= CFD.rowid
    Lisible et empêche les erreurs

    5) il ne sert a rien de mettre des alias de table plus grand encore que le nom des tables !!!!

    Voir ci-avant

    6) votre CASE est presque bien écrit...

    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   P.ref                                                           AS REF_ALS
           , P.label                                                         AS DESIGNATION_ALS
           , S.nom                                                           AS NOM_FOURNISSEUR
           , PFP.ref_fourn                                                   AS REF_FOURNISSEUR
           , P.stock                                                         AS STOCK_REEL
           , P.seuil_stock_alerte                                            AS STOCK_SECU
           , P.desiredstock                                                  AS STOCK_DESIRE
           , (PFP.unitprice/MR.rate)                                         AS PRIX_UNITAIRE
           , REPLACE(CFD.comment,'Réception de la commande fournisseur ','') AS NUMERO_CMD
           , CFD.qty                                                         AS QUANTITE_CMD
           , CASE CF.fk_statut
                WHEN '0' THEN 'BROUILLON'
                WHEN '1' THEN 'VALIDE'
                WHEN '2' THEN 'APPROUVE'
                WHEN '3' THEN 'ENVOYE AU FOURNISSEUR'
                WHEN '4' THEN 'RECU EN PARTIE'
                WHEN '5' THEN 'RECU COMPLETEMENT OU FERME'
                WHEN '9' THEN 'REFUSE'
                ELSE 'INCONNU'
             END AS STATUT_CMD
     
    FROM        ZenERP.llx_commande_fournisseur          AS CF  
           JOIN ZenERP.llx_commande_fournisseur_dispatch AS CFD ON CF.rowid = CFD.rowid
           JOIN ZenERP.llx_multicurrency_rate            AS MR  ON MR.fk_multicurrency = S.fk_multicurrency
           JOIN ZenERP.llx_product                       AS P   ON CFD.fk_product = P.rowid
           JOIN ZenERP.llx_product_fournisseur_price     AS PFP ON P.rowid = PFP.fk_product
           JOIN ZenERP.llx_societe                       AS S   ON S.rowid = PFP.fk_soc
     
    ORDER  BY (PFP.unitprice / MR.rate) DESC

    Bref, apprenez le langage SQL. Mon site web comme mes livres peuvent vous y aider

    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
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    Bonjour,

    Je prends note des remarques.

    J'ai utilisé Excel Query qui m'a sorti le code SQL (pas très joli du coup)

    Merci pour votre réactivité.

    Cordialement.

    PS : Je vais jeter un œil sur vos liens

  4. #4
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    Bonjour,

    J'ai testé votre code mais je rencontre des problèmes (voir ci-dessous).

    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
    30
     
    SELECT   P.ref                                                           AS REF_ALS
           , P.label                                                         AS DESIGNATION_ALS
           , S.nom                                                           AS NOM_FOURNISSEUR
           , PFP.ref_fourn                                                   AS REF_FOURNISSEUR
           , P.stock                                                         AS STOCK_REEL
           , P.seuil_stock_alerte                                            AS STOCK_SECU
           , P.desiredstock                                                  AS STOCK_DESIRE
           , (PFP.unitprice/MR.rate)                                         AS PRIX_UNITAIRE
           , REPLACE(CFD.comment,'Réception de la commande fournisseur ','') AS NUMERO_CMD
           , CFD.qty                                                         AS QUANTITE_CMD
           , CASE CF.fk_statut
                WHEN '0' THEN 'BROUILLON'
                WHEN '1' THEN 'VALIDE'
                WHEN '2' THEN 'APPROUVE'
                WHEN '3' THEN 'ENVOYE AU FOURNISSEUR'
                WHEN '4' THEN 'RECU EN PARTIE'
                WHEN '5' THEN 'RECU COMPLETEMENT OU FERME'
                WHEN '9' THEN 'REFUSE'
                ELSE 'INCONNU'
             END AS STATUT_CMD
     
    FROM        ZenERP.llx_commande_fournisseur          AS CF  
           JOIN ZenERP.llx_commande_fournisseur_dispatch AS CFD ON CF.rowid = CFD.rowid
           JOIN ZenERP.llx_multicurrency_rate            AS MR  ON MR.fk_multicurrency = S.fk_multicurrency
           JOIN ZenERP.llx_product                       AS P   ON CFD.fk_product = P.rowid
           JOIN ZenERP.llx_product_fournisseur_price     AS PFP ON P.rowid = PFP.fk_product
           JOIN ZenERP.llx_societe                       AS S   ON S.rowid = PFP.fk_soc
     
    ORDER  BY (PFP.unitprice / MR.rate) DESC
    Nom : MySQL_01.jpg
Affichages : 162
Taille : 133,3 Ko

    Nom : MySQL_02.jpg
Affichages : 159
Taille : 119,8 Ko

    Pourriez-vous m'aider une nouvelle fois, s'il vous plaît.

    Merci.

    Cordialement.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Les éditeurs graphique en peuvent pas supporter plus de 5% du code SQL. Au delà ils ne savent pas faire...

    Apprenez le langage SQL !

    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/ * * * * *

  6. #6
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    Bonjour,

    Oui ça plante de passer par l'interface graphique (ex: Microsoft Query "Out of Memory").

    Merci.

    A+

Discussions similaires

  1. Problème de syntaxe avec les fonctions CALLBACK
    Par nonozor dans le forum C++
    Réponses: 4
    Dernier message: 21/07/2008, 19h06
  2. [MySQL] Problème de syntaxe avec variable utilisée dans fonction PHP et MySQL
    Par redvivi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/03/2008, 22h07
  3. [VB-Excel]problème de syntaxe avec Array
    Par DomBourti dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/07/2006, 22h30
  4. Problème de syntaxe avec le composant TCppWebBrowser
    Par Ptite Développeuse dans le forum C++Builder
    Réponses: 10
    Dernier message: 19/04/2006, 16h48
  5. problème de syntaxe avec champ date
    Par mussara dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 17h19

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