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 :

Problème sur Select Case When


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 22
    Points
    22
    Par défaut Problème sur Select Case When
    Bonjour,

    Pourriez vous me dire ce qui cloche dans ma requête ?
    Merci

    (requête sous Visual studio/vb.net)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT        id_produit, stock_reel, CASE WHEN date_dispo > :datefeu THEN  stock_provisoire WHEN date_dispo < :datefeu THEN stock_provisoire + qty_commande END AS stock_provisoire, provenance, famille, nom, calibre, aspect, duree, categorie, no_agr, dst_secu, ma,date_dispo 
     
    FROM            produits

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Quel est le problème ?
    ~ Lola ~

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Merci pour la réponse rapide, il y a une erreur de syntaxe

  4. #4
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Il nous faudrait plus de précisions parce que c'est un peu léger comme info.

    - description de ta table
    - que renvoi :datefeu
    - que se passe-t-il si date_dispo = :datefeu ?
    - SGBD
    ~ Lola ~

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Donc pour la table :

    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
      id_produit INT(11) NOT NULL AUTO_INCREMENT,
      stock_reel INT(11) DEFAULT 0,
      stock_provisoire INT(11) DEFAULT NULL,
      provenance VARCHAR(10) DEFAULT NULL,
      famille VARCHAR(11) DEFAULT NULL,
      nom VARCHAR(75) DEFAULT NULL,
      calibre INT(3) DEFAULT NULL,
      aspect VARCHAR(9) DEFAULT NULL,
      duree VARCHAR(4) DEFAULT NULL,
      categorie VARCHAR(2) DEFAULT NULL,
      no_agr VARCHAR(150) DEFAULT NULL,
      dst_secu INT(3) DEFAULT NULL,
      ma DECIMAL(6, 1) DEFAULT NULL,
      nb_proj INT(3) DEFAULT NULL,
      ref_pando VARCHAR(13) DEFAULT NULL,
      fournisseurs VARCHAR(11) DEFAULT NULL,
      ref_fournisseurs VARCHAR(100) DEFAULT NULL,
      prix_achat DECIMAL(4, 1) DEFAULT NULL,
      code_ean BIGINT(13) DEFAULT NULL,
      poid_brut VARCHAR(10) DEFAULT NULL,
      produits_par_carton VARCHAR(10) DEFAULT NULL,
      prix_par_carton VARCHAR(10) DEFAULT NULL,
      qty_commande INT(11) DEFAULT 0,
      date_dispo DATE DEFAULT '0000-00-00',
      reservation_sur_commande INT(11) DEFAULT 0,
      PRIMARY KEY (id_produit)

    datefeu renvoi une date formatée comme ceci : "01/01/0001"
    Pour le cas ou date_dispo = :datefeu, c'est pareil que date_dispo > :datefeu, j'ai oublié le = dans la condition.

    La requete est exécutée par un programme que j'ai développé en vb.net qui utilise Devart.data.mysql

    Donc en gros je cherche à retourner la somme des stock provisoire + la quantité en commande, dans le cas ou la date du feu soit après la date de reception des commandes. Si la date du feu est avant ou le meme jour que la réception des commande, on affiche uniquement le stock provisoire.

    Merci

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Ça vient peut-être du fait que tu renomme ton case du même nom qu'une colonne. De plus formate tes dates avec to_char.
    ~ Lola ~

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Je viens d'essayer en changeant le nom du case, meme problème :
    Erreur dans la clause SELECT*: expression proche de 'date_dispo'.
    Clause FROM absente.
    Erreur dans la clause SELECT*: expression proche de ','.
    Impossible d'analyser le texte de la requête.

    Pour la date si je la passe en char je pourrais plus faire de comparaison si ?

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_dispo DATE DEFAULT '0000-00-00',
    datefeu renvoi une date formatée comme ceci : "01/01/0001"
    Tu ne vois pas un truc qui cloche là ?

    Utilise STR_TO_DATE pour convertir la date envoyée par le programme en format DATE standard SQL ou convertis la date dans ton programme avant de l'envoyer dans la requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Non aucun problème à ce niveau la, la conversion est automatique.

  10. #10
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Est-ce que c'est ta requête complète ?
    Parce que ça ressemble à une erreur de quand il manque qqchose.

    Peux-tu nous mettre ta requête après génération par ton programme.

    La conversion des dates est automatique à quel niveau ?
    Je te conseille de formater tes dates dans tous les cas, c'est beaucoup plus propre.
    ~ Lola ~

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Oui je suis d'accord, c'est vrai que c'est plus propre de la formater, mais lorsque je fait un select sur une valeur date_dispo, je récupère dans le code vb la date formatée comme ceci : #10/10/2010#


    la requête complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT        id_produit, stock_reel, CASE WHEN date_dispo > :datefeu THEN stock_provisoire WHEN date_dispo <= :datefeu THEN stock_provisoire + qty_commande END AS stock,
                              provenance, famille, nom, calibre, aspect, duree, categorie, no_agr, dst_secu, ma, nb_proj, ref_pando, fournisseurs, ref_fournisseurs, prix_achat * 3.3 AS prix_achat,
                              code_ean, poid_brut, produits_par_carton, prix_par_carton, date_dispo, qty_commande, reservation_sur_commande
    FROM            produits
    Je ne peux pas l'executer, car j'utilise l'assistant de création de requete dataset de visual studio.

    ----Edit--> Je viens de l'executer avec dbforge studio, et ça fonctionne parfaitement ...
    Donc c'est un problème de syntaxe avec visual studio ...

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Malgré les erreurs de syntaxe dans Visual studio, cela s’exécute correctement, je me suis arrêté sur ça j'aurais du essayer direct avec dbforge ...
    Désolé de vous avoir fait perdre votre temps !!

    Merci quand même.

    Romain

    EDIT : Suite --> http://www.developpez.net/forums/d12...a/#post6605748

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

Discussions similaires

  1. Problème avec select case
    Par juliopony dans le forum Fortran
    Réponses: 4
    Dernier message: 14/06/2007, 20h57
  2. Réponses: 7
    Dernier message: 29/05/2007, 10h21
  3. Problème avec Select case !
    Par kaiser59 dans le forum ASP
    Réponses: 4
    Dernier message: 27/05/2007, 12h55
  4. Equivalent "Select Case when then else end" sur Paradoxe
    Par Seuh.m dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/06/2006, 08h23
  5. [ASP3] problème de select case
    Par beegees dans le forum ASP
    Réponses: 13
    Dernier message: 03/02/2006, 10h46

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