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 :

Additionner des qté en fonction des dates et selection d'un certain nbre de réponses


Sujet :

Développement SQL Server

  1. #1
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut Additionner des qté en fonction des dates et selection d'un certain nbre de réponses
    Bonjour,

    Voici ma table (en gros):

    code client | référence piece | date de livraison(format SYYMMJJ) | Quantité
    varchar | varchar | numeric(7, 0) | numeric(10, 3)
    Lorsque les pièces sont livrées, la ligne correspondante est détruite. Donc s'il y a des date de livraison dans le passé, c'est qu'il y a du retard.

    Je voudrais une procédure stockée qui a comme parametre la ref de la piece et qui retourne :

    -l'addition des pieces qui devaient être livrées avant la date d'aujourd'hui pour l'ensemble des clients

    - l'addition par journée des pièces commandées pour l'ensemble des clients et cela pour les 30 prochains jours

    Au final j'aurai donc un tableau du style avec une seule ligne :

    nbres de pièces en retard | date d'aujourd'hi | date de demain
    .............Qté............................Qté...................Qté

    Je ne sais pas si il faut donner la date d'aujourd'hui comme parametre ou s'il y a un moyen de récupérer cette date avec sql server.

    Je sais que pour limiter le nombre de jours il doit y avoir un truc du genre SELECT TOP.

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    -l'addition des pieces qui devaient être livrées avant la date d'aujourd'hui pour l'ensemble des clients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT referencePiece,
    		SUM(quantite) AS quantiteTotale
    FROM maTableDeLivraisonPrevue
    WHERE dateDeLivraison < CAST(CONVERT(CHAR(6), GETDATE(), 12) AS NUMERIC(7, 0))
    GROUP BY referencePiece
    - l'addition par journée des pièces commandées pour l'ensemble des clients et cela pour les 30 prochains jours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT referencePiece,
    		SUM(quantite) AS quantiteTotale
    FROM maTableDeLivraisonPrevue
    WHERE dateDeLivraison BETWEEN CAST(CONVERT(CHAR(6), GETDATE(), 12) AS NUMERIC(7, 0))
    						AND CAST(CONVERT(CHAR(6), GETDATE() + 30, 12) AS NUMERIC(7, 0))
    Pourquoi avoir stocké des dates dans un NUMERIC
    A quoi sert une échelle à 0 ?

    A lireStocker des dates dans une colonne de type CHAR | NCHAR | VARCHAR | NVARCHAR où je parle du stockage de dates dans des colonnes de type chaîne, mais au fond le principe est le même )

    @++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Tu peux essayer çà aussi
    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
    CREATE PROCEDURE MaProcedure @Ref varchar(10)
    AS
    BEGIN
    	declare @QuantiteRetard int, @QuantiteJour int, @QuantiteDemain int
    	--somme des pieces en retards
    	select @QuantiteRetard=sum([Quantité]) from [LATABLE] 
                 where datediff(day,[date de livraison],Getdate())>0 and [référence piece]=@Ref
    	--somme des pieces commandés pour aujourd'hui
    	select @QuantiteJour=sum([Quantité]) from [LATABLE] where datediff(day,[date de livraison],Getdate())=0	and [référence piece]=@Ref
    	--somme des quantité pour les 30 prochains jours 
    	select @QuantiteDemain=sum([Quantité]) from [LATABLE] where datediff(day,[date de livraison],Getdate())<0
    	and [référence piece]=@Ref and datediff(day,[date de livraison],Getdate())<=-30
     
    	--renvoie des valeurs
    	select isnull(@QuantiteRetard ,0) as QuantiteRetard, isnull(@QuantiteJour,0) as QuantiteJour, isnull(@QuantiteDemain,0) as QuantiteDemain
     
     
    END

  4. #4
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Merci pour vos réponses!

    Au niveau du Numeric pour la date, je n'ai pas choisis et je ne peux pas le changer.

    J'y connaissais rien en conversion de date, ça m'a bien aidé.

    D'ailleurs la page MSDN si quelqu'un est intéressé.

    Alors pour le calcul du nombre de pièces en retard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ALTER PROCEDURE [dbo].[RetardPiece] (@RefInt varchar(50))
    AS
    SELECT SUM(Quantité) AS QuantiteTotale
    FROM MaTable
    WHERE Reference = @RefInt
    AND DateLivraison + 19000000 < CAST(CONVERT(CHAR(8), GETDATE(), 112) AS NUMERIC(8, 0))
    Le + 19000000 c'est parce que la date d'aujourd'hui par exemple donne dans ma table: 1091109 et + 19000000 ca donne 20091109.

    Sinon, moi je voudrais en quelque sorte un tableau de sum. Je veux la somme des quantités pour une pièce et pour chaque date différente pendant 30 jours et non la somme sur les 30 jours.

    Ca serait un peu un foreach ( en c#)
    Pour chaque date (d'aujourd'hui jusqu'à dans 30 jours)
    je trouve la reférence et j'additionne pour tous les clients.

    Je préfererais ne pas avoir à faire le foreach dans mon code C#, mais que SQL server me retourne lui même le tableau.

    EN plus, j'ai un autre problème : j'ai un champs qui me dit s'il la comande est ferme ou prévisionnelle. Mais lorsque je fais un sum des quantités pour une pièce sur une journée (dons la somme des commandes de tous les clients pour cette pièce et cette date) je fais la somme de commande prévisonnelles et fermes.

    J'aimerai avoir une sorte de if : s'il y a les 2 types de commandes dans la somme alors je renvois quelque chose sinon je renvoie le type commun.
    Pas évident

  5. #5
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    C'est bon j'ai réussie à avoir mon tableau de sum en fonction des dates :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ALTER PROCEDURE [dbo].[OrdreJour] (@RefInt varchar(50))
    AS
    SELECT CONVERT(CHAR(10),CONVERT(DATETIME,CAST(DateLivraison +19000000 AS varchar(8)),112),103),SUM(Quantité) AS QuantiteTotale
    FROM MaTable
    WHERE Reference = @RefInt
    AND DateLivraison+ 19000000 BETWEEN CAST(CONVERT(CHAR(8), GETDATE(), 112) AS NUMERIC(8, 0))
    						AND CAST(CONVERT(CHAR(8), GETDATE() + 30, 112) AS NUMERIC(8, 0))
    GROUP BY DateLivraison
    Sinon j'ai toujours mon petit problème de if...

    [EDIT] J'ai rajouter 2 colonnes de sum pour mes commandes fermes et prévisionnelles et je ragrde si elles sont nulles.

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

Discussions similaires

  1. [AC-2007] Récupérer des données en fonction de date la plus récente
    Par m6riil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/04/2013, 20h42
  2. calculer des valeurs en fonctions de dates
    Par texas2607 dans le forum Excel
    Réponses: 9
    Dernier message: 21/01/2011, 14h01
  3. Recherche des enregistrements en fonction des paramètres
    Par infoctet dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/01/2007, 09h51
  4. conception des liste en fonction des piles
    Par sino dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2006, 21h08
  5. sélection des bd en fonction des utilisateurs (pg_hba.conf)
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 18/03/2004, 18h34

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