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 :

[SQL Server 2000/2008] Film de stock sur plusieurs articles


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut [SQL Server 2000/2008] Film de stock sur plusieurs articles
    Bonjour,

    J'ai une table Stock toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE [tblStock] (
    [IdArticle] int NOT NULL,
    [Jour] datetime NOT NULL,
    [Stock] decimal(18, 5) NULL,
    CONSTRAINT [PK_tblStock]
    PRIMARY KEY CLUSTERED ([IdArticle] ASC, [Jour] ASC)
    WITH FILLFACTOR = 100
     ON [PRIMARY]
    )
    Je n'ai de valeur que les jours où il y a un changement de stock.
    Donc pour un article (IdArticle = 1) on peut avoir :
    01/02/2010 100
    02/02/2010 110
    07/02/2010 250
    25/02/2010 100
    Entre le 7 et le 24, le stock est resté à 250.
    En restitution, j'affiche tous les jours et je recrée les points manquants.

    Comment faire si on a plusieurs articles pour lesquelles on veut calculer le stock global jour après jour ?

    J'ai fait une PS avec un curseur mais ça ne me satisfait pas trop et c'est long (traitement article par article, jour par jour avec Update/Insert dans une table temporaire).
    En restant sous SQL Server 2000, y'a-t-il mieux ?
    Mon serveur devrait migrer sous 2008 sous peu.
    Puis-je espèrer des nouveautés qui permettraient de faire les choses un peu mieux ?

    Merci.
    [Access] Les bases du débogage => ici

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Implémentez une table calendrier :
    http://sqlpro.developpez.com/cours/gestiontemps/

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Mais encore ?
    Parce que je ne vois pas trop en quoi une table calendrier aidera à résoudre mon problème.
    (fin de journée, fin de semaine, fin de mois => grosse fatigue => neurone pas percutant)

    Merci.
    [Access] Les bases du débogage => ici

  4. #4
    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
    Une base de données n'invente pas des données qu'elle n'a pas. SI vous voulez afficher TOUS les jours, il faut une table avec TOUS les jours.

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

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Si j'ai un prix unitaire et une quantité, je suis bien capable d'afficher le prix global alors que la donnée n'est pas dans la base.

    Là, c'est juste un peu plus compliqué : si la donnée n'existe pas pour une journée mais pour avoir la donnée, il faut aller chercher la donnée qui existe pour la journée max des journées précédentes.
    Pour le moment, j'y arrive en gérant un curseur. Je voulais savoir s'il n'y avait pas plus efficace.
    Si j'ai une table calendrier, j'aurai (jointure externe entre stock et calendrier) :
    01/02/2010 100
    02/02/2010 110
    03/02/2010
    04/02/2010
    05/02/2010
    06/02/2010
    07/02/2010 250
    08/02/2010
    09/02/2010
    10/02/2010
    ...
    En quoi cela peut-il m'aider ?
    [Access] Les bases du débogage => ici

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il y a bien plus efficace, puisqu'avec une table calendrier votre problème se resoud en une seule requête.

    En faisant un produit cartésien entre ce calendrier sur la période concernée et les articles qui vous intéresse, puis une jointure externe sur vos stocks, et encore plus avec SQL Server 2008 qui permettra l'utilisation des fonctions de fenêtrage !

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/05/2012, 17h02
  2. SQL SERVER 2000 -> 2008
    Par floisel dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 14/12/2010, 19h55
  3. Réponses: 1
    Dernier message: 30/10/2009, 19h59
  4. Réponses: 0
    Dernier message: 04/02/2009, 12h26
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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