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 requête SQL Stock !


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Problème requête SQL Stock !
    Bonsoir chers internautes ^^
    J'ai 2 questions à vous poser svp pour que je puisse modifier la requête ci-dessous :

    1) En fait, je veux mettre à jour la quantité de l'article (dans le stock) après chaque commande validée, càd :

    a.Qte = a.Qte - c.Quantité

    2) Je veux que la validation des commandes soit faite par ordre croissant des dates de commandes (Date_commande). Cela dit, si la quantité de l'article dans le stock est insuffisante après une validation d'une commande X , les autres commandes qui viennent après cette date ne pourront pas être validées.

    Comment procéder ?

    Requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE Commande 
    SET Etat = 'Validée' 
    OUTPUT INSERTED.* 
    FROM Commande c
    JOIN Article a 
    ON c.Code_article = a.Code_article 
    WHERE (c.Quantité <= a.Qte) AND (c.Etat IS NULL OR c.Etat != 'Validée');

  2. #2
    Membre régulier
    Femme Profil pro
    Etudiante en informatique
    Inscrit en
    Janvier 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 98
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    A ta place j'utiliserai un déclencheur (trigger) SQL, cela va s'effectuer avant l'ajout des données et/ou la modification.
    Ensuite pour l'ordre de traitement je ne sais pas trop ...

  3. #3
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Pour la validation de commandes vous pouvez le traiter de façon procédurale si vous avez la date de commande avec un CURSOR. J'ai l'ai écrit pour SQL Server mais si ça ne marche par il faut le traduire pour votre moteur :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    DECLARE @NumCmd INT
     
    DECLARE @Exit BIT
     -- variable booléen pour casser le boucle s'il n'y a plus d'articles
     
    DECLARE Commandes CURSOR
    FOR SELECT
    	NumCmd
    FROM Commande
    WHERE Etat IS NULL
    ORDER BY DateCmd ASC
      -- on crée un curseur sur les commandes à traiter en ordre croissant par date
     
    OPEN Commandes
     
    FETCH NEXT FROM Commandes INTO @NumCmd
     
    WHILE @@FETCH_STATUS = 0 and @Exit = 0  -- si il reste des articles à attribuer on y va
     
    BEGIN
     
    IF ( SELECT
    	COUNT(Qte)
    FROM Commande) < ( SELECT
    	COUNT(Qte)
    FROM Article)  -- S'il n'y a plus assez d'articles on le flag
     
    BEGIN
    SET @Exit = 1
     -- Flag
    END
     
     
    IF ( SELECT
    	COUNT(Qte)
    FROM Commande) >= ( SELECT
    	COUNT(Qte)
    FROM Article)   -- S'il y a assez: FEU!!!
     
     
    BEGIN
    UPDATE Commande
    SET Etat = 'Validée'
    OUTPUT INSERTED.*
    FROM Commande c
    JOIN Article a
    	ON c.Code_article = a.Code_article
    WHERE c.NumCmd = @NumCmd
    END
     
    FETCH NEXT FROM Commandes INTO @NumCmd
     
    END
     
    CLOSE Commandes
    DEALLOCATE Commandes
    "Toute technologie suffisamment avancée est indiscernable de la magie." - Arthur C. Clarke

    Evan Barke - Ingénieur d'Etudes et Développement SQL Server
    Blog SQL Server, T-SQL, SSIS, Administration www.transactivesql.com
    Twitter - TransactiveSQL
    N'oubliez pas les boutons et

Discussions similaires

  1. Problème requête SQL
    Par mandaillou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/10/2005, 11h37
  2. Problème requête SQL dans page ASP
    Par rocs dans le forum ASP
    Réponses: 14
    Dernier message: 26/07/2005, 15h38
  3. problème requête sql
    Par psychoBob dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/07/2005, 17h50
  4. problème requête sql
    Par perfectdams dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/06/2005, 18h09
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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