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 :

Petit soucis de procédure ;)


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 12
    Points
    12
    Par défaut Petit soucis de procédure ;)
    Bonsoir à tous,

    J'ai un petit soucis de création d'une procédure.

    Je voudrais modifier ma procédure suivante. Tel qu'elle est présentée, elle me retourne les articles d'une commande par l'id de la commande et si le champs à servir est à true

    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
     
    USE [Cafer]
    GO
    /****** Object:  StoredProcedure [dbo].[usp_get_article_commandesByServir]    Script Date: 10/27/2010 19:23:56 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[usp_get_article_commandesByServir]
    			@Id_commande uniqueidentifier
    AS
    BEGIN
    Select Id_Articles_Commandes
    	  ,[Id_Commandes]
          ,[Article_Id]
          ,[Quantite]
          ,[Payer]
          ,AServir
      FROM [Cafer].[dbo].[Articles_Commandes]
    where [Id_Commandes] = @Id_commande and AServir = 'true'
     
    end
    Le soucis étant que je voudrais faire la somme de la quantité par rapport à un meme article encodé. Ex: le serveur rentre
    1* sprite
    1* coca
    1* coca
    1* coca.

    J'aurai donc quatre ligne dans ma table, ou 3 ont le même id article. Je voudrais faire la somme de la quantité de c'est trois articles et afficher aussi le reste de la commande.

    Donc ca ferais en retour

    1* sprite
    3* coca.

    Je me doutes bien qu'il faut que je joue avec des distincts et des sum, mais c'est un peu le brouillard.

    Merci à tous, j'espère que ma questions est compréhensible.

    Bonne soirée

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Votre demande n'est pas tout à fait claire.

    Comme vous ne décrivez par comment est alimentée la table ("le serveur rentre" ca ne nous dit pas du tout quelles lignes sont écrites dans la table - en supposant qu'il n'y en ait qu'une).

    de plus, on ne sait pas exactement ce que vous voulez obtenir en sortie. ( a priori vous devriez utliser un aggregat SUM et une clause GROUP BY mais comme vous retournez aussi un id de commande cela semble incompatible).

    Bref, précisez votre besoin fonctionnel et postez aussi le DDL de la table en question.

    Accessoirement, votre serveur il a des clients qui ont de drôles de gout

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Bonjour merci pour votre réponse je vais essayer d'être au plus clair.

    Voici un screen de ma base de donnée. On peux remarquer 3 tables concernée, ma tables commande, et ma table articles. J'ai ma table article_commande qui fait la relation entre les deux.



    Lorsqu'un serveur ajoute de nouveaux article à ma commandes, ceux ci s'ajouteront donc dans ma table article commande. J'ai intégrer un champs "Aservir", celui-ci me sera nécessaire par la suite pour afficher les valeurs pour le barman.

    Ma demande est justement d'afficher les articles d'une commande par rapport a un id_commande et ou des articles sont a servir.

    Comme je l'avais spécifié dans mon ancien poste le serveur peut tout à fait encoder les consommations des clients.

    1*sprite
    1*coca
    1*sprite
    1*coca

    C'est différentes valeurs seront donc incrémenter au niveau de ma table "article_commande" avec comme value du champs "Aservir" à true.

    Mais lorsque j'affiche ces donnée au barman, j'aurai souhaité que les valeurs soient groupées par rapport à leur quantité, pour facilité la lecture rapide des articles et ainsi leur préparation

    Donc il aura deux conditions -> where id_commande = @id_com qui serait passer en paramètre et and Aservir='true'

    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
     
    try
                {
                    using (SqlConnection myConn = new SqlConnection(Settings.CS))
                    {
                        using (SqlCommand myCmd = new SqlCommand("usp_get_article_commandesByServir", myConn))
                        {
                            myCmd.Parameters.Clear();
                            myCmd.CommandType = CommandType.StoredProcedure;
                            myCmd.Parameters.Add(new SqlParameter("@Id_commande", id_com));
                            if (myConn.State == ConnectionState.Closed)
                            {
                                myConn.Open();
                            }
                            SqlDataReader reader = myCmd.ExecuteReader();
     
                            List<Article_Commande> arts = new List<Article_Commande>();
                            while (reader.Read())
                            {
                                Article_Commande article_com = new Article_Commande();
                                article_com.Id_Article_commandes = new Guid(reader["Id_Articles_Commandes"].ToString());
                                article_com.IdCommandes = getcommandesbyid(id_com);
                                article_com.Article_Id = ArticleDAL.getarticlebyid(new Guid(reader["Article_Id"].ToString()));
                                article_com.Payer = Convert.ToBoolean(reader["Payer"]);
                                article_com.Quantite = Convert.ToInt32(reader["Quantite"]);
                                article_com.AServir = Convert.ToBoolean(reader["AServir"]);
     
                                arts.Add(article_com);
                            }
                            reader.Close();
                            myConn.Close();
                            return arts;
     
                        }
                    }
                }
                catch (SqlException ex)
                {
                    throw ex;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
    en retour je souhaite donc récupérer
    SELECT Id_Articles_Commandes
    ,[Id_Commandes]
    ,[Article_Id]
    ,[Quantite]
    ,[Payer]
    ,AServir
    avec la somme des quantité pour les articles qui sont les mêmes(donc ou le champs "Article_id" sont les mêmes.)

    Dans mon exemple ci dessus ca ferait
    2*sprite + les autres info
    2*coca + les autres info
    Pour telle commande préciser et ou les articles sont à servir.

    Voila j'espère que j'ai été plus claire

    Merci infiniment

    Iobane

  4. #4
    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 : 42
    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,

    Si vous prenez la colonne Id_Articles_Commandes, cela n'est pas possible puisque cela identifie une certaine quantité commandée d'un seul article.

    De la même façon, vous ne pouvez pas prendre les colonnes Payer et AServir, puisque pour une même commande, il peut y avoir des articles payés ou non, et des articles à servir ou déjà servis.
    En revanche vous pouvez savoir pour une commande, combien de cocas ont été commandés, combien d'entre eux ont été payé, et combien d'entre eux sont à servir.

    Dommage que vous n'ayez pas donnée le code de votre procédure stockée, pour voir où vous en êtes et vous aider directement sur votre code ...

    Un début peut être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT		C.IdCommande
    		, AC.Article_Id
    		, SUM(AC.Quantite) AS quantite_totale
    		, SUM(AC.Payer) AS quantite_payee
    		, SUM(AC.AServir) AS quantite_a_servir
    FROM		dbo.Commande AS C
    INNER JOIN	dbo.Articles_Commandes AS AC 
    			ON C.IdCommande = AC.IdCommande
    WHERE		C.IdCommande = @IdCommande
    GROUP BY	C.IdCommande
    		, AC.Article_Id
    @++

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Bonjour merci pour votre réponse. La procédure stockée de base que j'utilise est présente dans mon premier post, je la remet ici pour une question de suivi :

    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
     
    USE [Cafer]
    GO
    /****** Object:  StoredProcedure [dbo].[usp_get_article_commandesByServir]    Script Date: 10/27/2010 19:23:56 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[usp_get_article_commandesByServir]
    			@Id_commande uniqueidentifier
    AS
    BEGIN
    SELECT Id_Articles_Commandes
    	  ,[Id_Commandes]
          ,[Article_Id]
          ,[Quantite]
          ,[Payer]
          ,AServir
      FROM [Cafer].[dbo].[Articles_Commandes]
    WHERE [Id_Commandes] = @Id_commande AND AServir = 'true'
     
    end
    En lisant votre réponse je penses que vous avez pas bien saisie ma question. Mais de ce que je lit, il y à une parti qui m'intéresse .

    En revanche vous pouvez savoir pour une commande, combien de cocas ont été commandés, combien d'entre eux ont été payé, et combien d'entre eux sont à servir.
    Je voudrais justement savoir comment faire pour modifier la procédure ci_dessus et ainsi savoir combien de coca sont a servir pour tel commande ( en sachant qu'il sont à servir).Mais aussi pour toute autre article qui serait en doublont dans ma table article_commande et ainsi avoir un résumé des articles à servir (en affichant la quantité).



    Au dessus, on peux voir un exemple dans ma base sql. On peux remarquer que l'id_commande, ainsi que l'id_article sont le même. Donc il y a dans mon exemple d'abord une commande de 1 coca et puis une commande de 2 coca qui sont à servir. Je voudrais que puisque l'idarticle sont les mêmes faire la somme des quantité(et ainsi me retourner 3 et les autres articles par la même occassion).Je ne sais pas si cela est possible.

    Le but final est bien d'avoir un résumé de la commande par exemple sur la table 3 de TOUT les articles a servir en regroupant les articles qui sont les même( cela faciletera la lecture du barman)

    Merci

Discussions similaires

  1. Petit soucis pour se connecter à l'adsl
    Par Blowih dans le forum Réseau
    Réponses: 4
    Dernier message: 28/07/2004, 00h16
  2. petit soucy de fenetre cmd
    Par FeetloveR666 dans le forum Windows
    Réponses: 5
    Dernier message: 03/07/2004, 14h24
  3. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58
  4. Réponses: 6
    Dernier message: 21/01/2004, 13h25
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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