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

  1. #1
    Membre expérimenté

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    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.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Implémentez une table calendrier :
    http://sqlpro.developpez.com/cours/gestiontemps/

  3. #3
    Membre expérimenté

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    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.

  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
    21 878
    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 : 21 878
    Points : 53 055
    Points
    53 055
    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 +

  5. #5
    Membre expérimenté

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    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 ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    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 !

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 878
    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 : 21 878
    Points : 53 055
    Points
    53 055
    Billets dans le blog
    6
    Par défaut
    Plus exactement un RIGHT OUTER JOIN de votre table de prod à la table calendrier en limitant sur la période concernée....

    A +

  8. #8
    Membre expérimenté

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Je dois être bouché parce que je vois toujours pas ...
    _____________Art1___Art2___Résultat final attendu
    01/02/2010____100___50_____150
    02/02/2010____110__________160
    03/02/2010_________________160
    04/02/2010____100__________210
    05/02/2010_________________210
    06/02/2010_________________210
    07/02/2010____250__________350
    08/02/2010_________________350
    09/02/2010____50_____ _____300
    10/02/2010_________________300

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    J'ai un problème avec votre illustration, comment calculez-vous le résultat attendu (à partir du 04/02 notamment) ?

  10. #10
    Membre expérimenté

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Au temps pour moi ...
    _____________Art1___Art2___Résultat final attendu
    01/02/2010____100___50_____150
    02/02/2010____110__________160
    03/02/2010_________________160
    04/02/2010____100__________150
    05/02/2010_________________150
    06/02/2010_________________150
    07/02/2010____250__________300
    08/02/2010_________________300
    09/02/2010____50___________100
    10/02/2010_________________100

    Fatigué moi ...

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