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

MS SQL Server Discussion :

count intermédiaire récurcif


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut count intermédiaire récurcif
    Bonjour,

    je travaille sur des extrations pour alimenter un BI. la société vend par lot, qui est revendu au détail jour par jour

    la table vente a les infos suivantes: num_client,num_produit,quantité, date_du_jour, num_lot
    la table des lots
    num_lot,num_client,num_produit,date_livraison,quantité_produit

    mon problème est de savoir si la société ne fait pas le réassort trop tot?

    comment calculer la somme des ventes d'un produit pour un lot donné pour un jour donné, mais pour tous les clients et lots sans faire de curseur

    pour un client et un lot , une requête du style (mais qui ne fonctionne pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select SUM(quantité), num_lot, MIN(date_du_jour )
    from vente
    join lot on ....
    where num_produit=xx
    and num_client=yy
    and date_du_jour > date_de_livraison
    group by num_lot
    having SUM(quantité) > quantité_produit
    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour,

    Qui ne fonctionne pas
    C'est à dire ? Le résultat retourné n'est pas le bon ?
    Une erreur est retournée ?
    "Qui ne fonctionne pas" c'est vague ...


    comment calculer la somme des ventes d'un produit pour un lot donné pour un jour donné, mais pour tous les clients et lots sans faire de curseur
    Pour un lot donné ou pour tous les lots ???


    Somme des ventes d'un produit peu importe le lot et le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT num_produit, sum(quantite)
    FROM vente
    WHERE date_du_jour=MaDateVoulue
    AND num_produit=MonProduitVoulu
    GROUP BY num_produit

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Citation Envoyé par serge0934 Voir le message
    comment calculer la somme des ventes d'un produit pour un lot donné pour un jour donné, mais pour tous les clients et lots sans faire de curseur
    pouvez vous fournir un petit jeu de test avec résultat attendu, ça aiderait a mieux comprendre ce que vous souhaitez...

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    un petit jeu de test

    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
     
    CREATE TABLE VENTE
    (num_client int,
    num_produit int,
    quantité int, 
    date_du_jour int, 
    num_lot int
    );
     
    CREATE TABLE LOT
    (num_lot int,
    num_client int ,
    num_produit int,
    date_livraison int,
    quantité_produit int
    );
     
    INSERT INTO LOT (um_lot,num_client,num_produit,date_livraison,quantité_produit)
    VALUES(87,34,658,20121128,900);
    INSERT INTO LOT (um_lot,num_client,num_produit,date_livraison,quantité_produit)
    VALUES(89,34,658,20121206,700);
    INSERT INTO LOT (um_lot,num_client,num_produit,date_livraison,quantité_produit)
    VALUES(91,34,658,20121220,1000);
    INSERT INTO LOT (um_lot,num_client,num_produit,date_livraison,quantité_produit)
    VALUES(102,34,658,20121229,1000);
     
     
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,193,20121209,87);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,145,20121210,89);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,125,20121211,89);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,146,20121212,89);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,167,20121213,89);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,112,20121214,89);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,154,20121215,89);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,125,20121216,90);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,156,20121217,90);
    INSERT INTO VENTE (num_client,num_produit,quantité, date_du_jour, num_lot)
    VALUES (34,658,189,20121218,90);
    donc le principe recherché est de déterminer a partir de quand on change de lot; on sait par exemple que l'on est passé du lot 87 au lot 89 le 9 décembre et du 89 au 90 le 16, mais on ne sait pas combien de produit du lot 89 a été vendu le 16

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    et, à partir de ce jeu d'essai, quel est le résultat attendu ?
    Parce que je ne vois toujours pas clairement quel est le soucis.

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    je voudrais avoir un résultat qui me dise

    le 10 décembre on a vendu 45 produits du lot 87 et 100 du lot 89
    sachant qu'on ne peut pas avoir 2 lignes dans vente pour la même journée, le lot du premier article vendu est celui qui est renseigné dans vente. A l'insertion de la 1° vente, on mets le lot du produit et après on fait update quantité=quantité+1 sans toucher au lot (c'est pas beau mais c'est comme cela )

    donc pour cela, il me savoir combien de produit du lot 87 j'ai vendu avant le 10 décembre; ensuite je ferais total du lot => 900 - nb_vendu_avant_lot_87 = nb_vendu_le_10_lot_87
    et j'aurai le nombre vendus le 10 pour le lot 89 en faisant
    nb_vendu_le_10_lot_89 = 145 - nb_vendu_le_10_lot_87

    et ainsi de suite...

    je reconnais que c'est un peu tordu

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    le 10 décembre on a vendu 45 produits du lot 87 et 100 du lot 89
    Le 10 décembre, vous n'avez vendu que du lot 89 non ????

    pas très clair tout ça.

    Dans votre jeu de données, je pense qu'il manque la totalité des ventes pour le lot 87, sinon nous ne pouvons pas savoir combien ont été vendus le jour où ont est passé au lot 89

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    donc le principe recherché est de déterminer a partir de quand on change de lot; on sait par exemple que l'on est passé du lot 87 au lot 89 le 9 décembre et du 89 au 90 le 16, mais on ne sait pas combien de produit du lot 89 a été vendu le 16
    dans votre jeu de données, on est passé du lot 89 au 90 le 15 décembre non ???

    La date au type INT, c'est voulu ??? pourquoi ne pas mettre cette colonne en type DATE ?

  9. #9
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    oui, tu as raison aieeeuuuuu....

    a force de chercher et tourner en rond je fatigue;

    La date au type INT, c'est voulu ??? pourquoi ne pas mettre cette colonne en type DATE ?
    oui, car en fait, l'appli est vielle, elle tournait sur NT4 comme OS et SQL6.5 comme version SQL (en 1998)

    a l'époque le champ date n'existait pas
    et il n'y a pas les crédits pour récrire l'appli, on a pu péniblement passer les agences sous SQL2000 et pas plus a cause des drivers de l'appli.
    en revanche, le reporting est sur un SQL2008R2, pour les chefs ya les sous...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2007, 16h36
  2. limiter le résultat retourné par le count
    Par SuperFoustan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/08/2003, 12h10
  3. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02
  4. Multiple Count
    Par Antichoc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2003, 11h19
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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