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 :

Création d'une requête Sql Server


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut Création d'une requête Sql Server
    Bonjour,

    Je suis sous sql server 2012 server, et je suis en train de développer une application en C#. J'ai 4 tables :

    1- article (num, article,reference , code, quantite,date, prix , fourniseur)
    2- mouvement d'entre ( article , reference,date, quantiteE,fournisseur)
    3- mouvement de sortie ( article, reference,date,quantiteS,fourniseur,client)
    4- stock (article, refernce,quantiteSt)

    Comment faire pour remplir en quantiteSt la sum des (quantiteE)-(quantiteS) ?

    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Si le but est d'avoir la table stock qui soit toujours fidèle aux entrées/sorties, alors le mieux est d'utiliser une vue plutôt que de mettre à jour à chaque fois la table lorsque cela est nécessaire.

    Ensuite, le stock représente-t-il l'état actuel du stock, ou le delta des entrées et des sorties ? En gros, faut-il tenir compte de la valeur initiale "quantite" de la table article ?
    Comment sont définies vos clés primaires ? Sur article ? reference ?

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    Bonjour ,

    Je n'ai aucune relation de clés entre les tables.
    Je veux juste faire la delta entre les entres et sorties le stock sera base sur ce calcule en bref.
    Je suis sous C# et je veux que lorsque je clique sur le bouton "etat de stock ", il me donne le résultat du calcul pour chaque article de même catégorie.

    Merci pour votre collaboration.

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par drknow1 Voir le message
    je n'ai aucune relation des clés entre les tables
    Première erreur. Une base de données est faite pour qu'il y ait des relations entre les différentes entités. Sans elles, les performances des requêtes sont loin d'être optimum.

    Ensuite, s'il n'y a pas de clé explicites (pas de clé primaire, et donc pas de clé étrangère), il y a au moins des clés implicites (quelles colonnes prendre en compte pour associer un mouvement du stock à un article ? La colonne article ? La colonne référence ? Les deux ?)

    Citation Envoyé par drknow1 Voir le message
    je veux juste faire la delta entre les entres et sorties le stock sera base sur ce calcule en bref
    Deuxième erreur. Dans ce cas, il est totalement inutile d'avoir une table stock. Une requête SELECT suffit.

    Quelque chose dans le genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT A.reference, E.total - S.total
    FROM articles AS A
    INNER JOIN (SELECT EA.reference, SUM(EE.quantiteE) AS total FROM articles AS EA LEFT JOIN Entree AS EE ON EA.reference = EE.reference GROUP BY EA.reference) AS E ON A.reference = E.reference
    INNER JOIN (SELECT SA.reference, SUM(SS.quantiteS) AS total FROM articles AS SA LEFT JOIN Sortie AS SS ON SA.reference = SS.reference GROUP BY SA.reference) AS S ON A.reference = S.reference

    donnera le delta. Je suis parti du principe que la référence était la clé permettant de lier les différentes tables entre elles. A adapter donc si ce n'est pas le cas.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    Bonjour,

    Je vous remercie pour votre collaboration.

    J'ai exécuté votre requête, mais je reçois des résultats inattendus.
    Je fais un test sur un article qui avait dans les entre Q=5 et sortie 3 et je reçois dans la quantité en stock 7 comme s'il y avait des doublons.
    Je mets en pièce jointe le résultat de 3 requêtes Nom : Requete Sql.png
Affichages : 354
Taille : 124,3 Ko

  6. #6
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Dans ce cas, merci de bien vouloir respecter les règles du forum : http://www.developpez.net/forums/d96...vement-poster/

    Notamment, avoir le schéma de la base de données ainsi qu'un jeu de données.

    Ensuite, la requête que j'ai fournie précédemment de marche pas car visiblement, la référence d'un article n'est pas unique (plusieurs articles ayant la même référence existe). Merci donc, comme je l'ai précisé plus haut, de bien vouloir nous donner les clés des différentes tables. Sans cela, nous ne pouvons rien faire.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 622
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Première erreur. Une base de données est faite pour qu'il y ait des relations entre les différentes entités. Sans elles, les performances des requêtes sont loin d'être optimum.
    Et aussi et surtout, sans relation pas de contrôle d'intégrité possible, or, la première qualité d'une base de données bien avant la performance, est de garantir la fiabilité des données !
    Pour le reste, la modélisation semble plus qu'hasardeuse

  8. #8
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Et aussi et surtout, sans relation pas de contrôle d'intégrité possible
    Merci d'avoir corrigé cet honteux oubli de ma part...

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Par défaut
    Bonjour,

    Je vous remercie une nouvelle fois de votre collaboration-

    Vous est-il possible de m'aider à créer des relations entre les tables ?
    Je crois que je vais avoir dans la table des mouvements d'entrée comme dans celle des mouvements de sortie des doublons.
    C'est normal, puisqu'un article peut avoir plusieurs fois des sorties de stock avec des dates et quantités différentes.

    Voici la définition de l’ensemble de mes tables :

    /Table article
    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
    USE [GS]
    GO
     
    /****** Object:  Table [dbo].[Art]    Script Date: 07/11/2016 11:02:39 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[Art](
    	[réference] [varchar](50) NOT NULL,
    	[CodeArtc] [varchar](50) NOT NULL,
    	[Désignation] [nvarchar](max) NOT NULL,
    	[Quantite] [numeric](18, 0) NOT NULL,
    	[prix] [nchar](10) NOT NULL,
    	[date] [varchar](50) NULL,
    	[ENUM] [int] IDENTITY(1,1) NOT NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO


    Table Client
    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
    USE [GS]
    GO
     
    /****** Object:  Table [dbo].[Client]    Script Date: 07/11/2016 11:03:39 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[Client](
    	[Nom] [varbinary](50) NOT NULL,
    	[Adress] [varchar](50) NULL,
    	[telephonne] [varchar](50) NULL,
    	[email] [nchar](10) NULL,
    	[pays] [nchar](10) NULL,
    	[ville] [nchar](10) NULL,
     CONSTRAINT [PK_Client] PRIMARY KEY CLUSTERED 
    (
    	[Nom] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO

    Table Fourniseeur
    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
    USE [GS]
    GO
     
    /****** Object:  Table [dbo].[Fournisseur]    Script Date: 07/11/2016 11:04:38 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[Fournisseur](
    	[Nom] [varchar](50) NOT NULL,
    	[Addresse] [varchar](50) NULL,
    	[telephone] [nchar](10) NULL,
    	[email] [varchar](50) NULL,
    	[pays] [varchar](50) NULL,
    	[ville] [varchar](50) NULL,
    	[Num] [int] NULL,
     CONSTRAINT [PK_Fournisseur] PRIMARY KEY CLUSTERED 
    (
    	[Nom] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO
    Table Projet
    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
    USE [GS]
    GO
     
    /****** Object:  Table [dbo].[Projet]    Script Date: 07/11/2016 11:05:08 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[Projet](
            [réference] [varchar](50) NOT NULL,
    	[CodeArtc] [varchar](50) NOT NULL,
    	[NProjet] [varchar](50) NULL,
    	[qtedemande] [numeric](18, 0) NULL,
    	[datede] [date] NULL,
    	[datefin] [date] NULL,
    	[client] [varchar](50) NULL
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO
    Table Sortie
    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
    USE [GS]
    GO
     
    /****** Object:  Table [dbo].[sortie]    Script Date: 07/11/2016 11:05:48 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[sortie](
    	[réference] [varchar](50) NOT NULL,
    	[codeartc] [varchar](50) NOT NULL,
    	[n.client] [varchar](50) NULL,
    	[Quantite] [numeric](18, 0) NULL,
    	[date] [varchar](50) NULL,
     CONSTRAINT [PK_sortie] PRIMARY KEY CLUSTERED 
    (
    	[codeartc] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO
     
    ALTER TABLE [dbo].[sortie]  WITH CHECK ADD  CONSTRAINT [FK_sortie_sortie] FOREIGN KEY([codeartc])
    REFERENCES [dbo].[sortie] ([codeartc])
    GO
     
    ALTER TABLE [dbo].[sortie] CHECK CONSTRAINT [FK_sortie_sortie]
    GO
    Table Stock
    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
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[Stock](
    	[réference] [varchar](50) NOT NULL,
    	[Codeartc] [varchar](50) NOT NULL,
    	[quantite] [numeric](18, 0) NULL,
    	[fournisseur] [varchar](50) NULL,
    	[date] [varchar](50) NULL,
     CONSTRAINT [PK_Stock] PRIMARY KEY CLUSTERED 
    (
    	[Codeartc] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO
     
    ALTER TABLE [dbo].[Stock]  WITH CHECK ADD  CONSTRAINT [FK_Stock_Stock] FOREIGN KEY([Codeartc])
    REFERENCES [dbo].[Stock] ([Codeartc])
    GO
     
    ALTER TABLE [dbo].[Stock] CHECK CONSTRAINT [FK_Stock_Stock]
    GO

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

Discussions similaires

  1. probléme dans une requête sql server
    Par red_one dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/06/2009, 09h15
  2. Réponses: 1
    Dernier message: 03/04/2009, 10h09
  3. Réponses: 1
    Dernier message: 05/11/2008, 12h04
  4. problème de création d'une requête SQL
    Par crushilefou dans le forum Requêtes
    Réponses: 9
    Dernier message: 07/12/2007, 11h59
  5. Aidez moi pour une requête SQL server
    Par pop10 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/06/2007, 22h15

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