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 champ calculé (somme d'un champ d'une autre table avec clause where) [2014]


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2016
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Création champ calculé (somme d'un champ d'une autre table avec clause where)
    Bonjour,
    J'ai 2 tables :
    • Table T_Comptes : Id_Compte, Nom_Compte, Total_Ecritures, ...
    • Table T_Ecritures : Id_Ecriture, Nom_Ecriture, Montant_Ecriture, ... , Compte_Id

    La table T_Ecritures contenant les écritures relatives à tous les comptes créés.

    J'ai également les vues équivalentes

    Je voudrais créer un champ calculé "Total_Ecritures" (dans T_Comptes) qui soit la somme des "Montant_Ecriture" du Compte

    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(Montant_Ecriture) FROM T_Ecritures WHERE Compte_Id = (Id_Compte de la table T_Comptes)
    Pouvez-vous m'aider :
    - Faut-il créer le champ calculé dans la table ou dans la vue ?
    - Format de la formule ou requête du champ calculé ?
    - et tout autre conseil

    Merci d'avance
    Bob

  2. #2
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez ajouter cette colonne dans votre vue, en faisant une jointure externe sur la table des ecritures, et en ajoutant votre SUM directement dans la vue.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2016
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci pour la réponse.
    Etant plutôt débutant et sans abuser, je l'espère !, pouvez-vous m'aider sur l'ajout de la colonne dans la vue.
    les champs concernés sont indiqués en rouge et gras

    Le code SQL actuel de la TABLE T_Ecritures est le suivant :
    Code sql : 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
    48
    49
    50
    51
    52
    53
    54
    55
    CREATE TABLE [dbo].[T_Ecritures](
    	[Id_Ecriture] [int] IDENTITY(1,1) NOT NULL,
    	[Nom] [varchar](50) NOT NULL,
    	[Date] [date] NOT NULL,
    	[Montant] [numeric](18, 2) NOT NULL,
    	[Pointée] [bit] NOT NULL,
    	[Montant Pointé] [numeric](18, 2) NULL,
    	[Compte_Id] [int] NOT NULL,
    	[Catégorie_Id] [int] NOT NULL,
    	[Rubrique_Id] [int] NOT NULL,
    	[Type_Id] [int] NULL,
    	[Mode_Id] [int] NULL,
    	[Commentaires] [varchar](50) NULL,
    	[Mois] [varchar](10) NULL,
    	[Trimestre] [varchar](10) NULL,
    	[Personne_Id] [int] NOT NULL,
    	[Réserve] [varchar](50) NULL,
     CONSTRAINT [PK_T_Ecritures] PRIMARY KEY CLUSTERED 
    (
    	[Id_Ecriture] 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].[T_Ecritures]  WITH CHECK ADD  CONSTRAINT [FK_T_Ecritures_L_Modes] FOREIGN KEY([Mode_Id])
    REFERENCES [dbo].[L_Modes] ([Id_Mode])
    GO
    
    ALTER TABLE [dbo].[T_Ecritures] CHECK CONSTRAINT [FK_T_Ecritures_L_Modes]
    GO
    
    ALTER TABLE [dbo].[T_Ecritures]  WITH CHECK ADD  CONSTRAINT [FK_T_Ecritures_L_Rubriques] FOREIGN KEY([Rubrique_Id])
    REFERENCES [dbo].[L_Rubriques] ([Id_Rubrique])
    GO
    
    ALTER TABLE [dbo].[T_Ecritures] CHECK CONSTRAINT [FK_T_Ecritures_L_Rubriques]
    GO
    
    ALTER TABLE [dbo].[T_Ecritures]  WITH CHECK ADD  CONSTRAINT [FK_T_Ecritures_T_Comptes] FOREIGN KEY([Compte_Id])
    REFERENCES [dbo].[T_Comptes] ([Id_Compte])
    GO
    
    ALTER TABLE [dbo].[T_Ecritures] CHECK CONSTRAINT [FK_T_Ecritures_T_Comptes]
    GO
    
    ALTER TABLE [dbo].[T_Ecritures]  WITH CHECK ADD  CONSTRAINT [FK_T_Ecritures_T_Personnes] FOREIGN KEY([Personne_Id])
    REFERENCES [dbo].[T_Personnes] ([Id_Personne])
    GO
    
    ALTER TABLE [dbo].[T_Ecritures] CHECK CONSTRAINT [FK_T_Ecritures_T_Personnes]
    GO

    Le code SQL de la TABLE T_Comptes est le suivant :
    Code sql : 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
    CREATE TABLE [dbo].[T_Comptes](
    	[Id_Compte] [int] IDENTITY(1,1) NOT NULL,
    	[Nom] [varchar](50) NOT NULL,
    	[Actif] [bit] NOT NULL,
    	[Numéro] [varchar](50) NOT NULL,
    	[Agence] [varchar](50) NOT NULL,
    	[Solde Initial] [numeric](18, 2) NULL,
    	[Contact] [varchar](max) NULL,
    	[Commentaires] [varchar](max) NULL,
    	[Montant Ecritures] [numeric](18, 2) NULL,
    	[Montant Ecritures Pointées] [numeric](18, 2) NULL,
    	[Personne_Id] [int] NOT NULL,
    	[Réserve] [varchar](50) NULL,
     CONSTRAINT [PK_T_Comptes] PRIMARY KEY CLUSTERED 
    (
    	[Id_Compte] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    CREATE UNIQUE NONCLUSTERED INDEX [IX_T_Comptes] ON [dbo].[T_Comptes]
    (
    	[Personne_Id] ASC,
    	[Nom] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    GO

    Et le code SQL actuel de la VUE V_Comptes est le suivant :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW [dbo].[V_Comptes]
    AS
    SELECT        Id_Compte AS [#], Nom, Actif, Numéro, Agence, [Solde Initial], [Montant Ecritures], [Montant Ecritures Pointées], Contact, Commentaires, Personne_Id AS [#Pers]
    FROM            dbo.T_Comptes
    
    GO

    Merci d'avance

  4. #4
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE VIEW [dbo].[V_Comptes]
    AS
    SELECT        C.Id_Compte AS [#], C.Nom, C.Actif, C.Numéro, C.Agence, C.[Solde Initial], C.[Montant Ecritures], C.[Montant Ecritures Pointées], C.Contact, C.Commentaires, C.Personne_Id AS [#Pers], SUM(E.[Montant Pointé]) 
    FROM            dbo.T_Comptes C
    LEFT JOIN dbo.T_ecritures E
        ON E.compte_id  = C.id_compte
    GROUP BY C.Id_Compte AS [#], C.Nom, C.Actif, C.Numéro, C.Agence, C.[Solde Initial], C.[Montant Ecritures], C.[Montant Ecritures Pointées], C.Contact, C.Commentaires, C.Personne_Id AS [#Pers]

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2016
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci, je vais tester dès ce soir

    et un merci de plus pour la réactivité ;-)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2016
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Quelques petits problèmes de syntaxe à corriger et tout est OK
    Pour info le code corrigé :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE VIEW [dbo].[V_Comptes_SUM]
    AS
    SELECT        C.Id_Compte AS [#], C.Nom, C.Actif, C.Numéro, C.Agence, C.[Solde Initial], C.[Montant Ecritures], C.[Montant Ecritures Pointées], C.Contact, C.Commentaires, C.Personne_Id AS [#Pers], SUM(E.[Montant]) as Total 
    FROM            dbo.T_Comptes C
    LEFT JOIN dbo.T_ecritures E
        ON E.compte_id  = C.id_compte
    GROUP BY C.Id_Compte, C.Nom, C.Actif, C.Numéro, C.Agence, C.[Solde Initial], C.[Montant Ecritures], C.[Montant Ecritures Pointées], C.Contact, C.Commentaires, C.Personne_Id
     
    GO
    Merci pour cette aide

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

Discussions similaires

  1. Champ calculé somme de deux champs dans deux tables
    Par wulfram dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 19/10/2016, 22h38
  2. Réponses: 7
    Dernier message: 12/08/2014, 11h02
  3. Réponses: 8
    Dernier message: 10/02/2014, 14h57
  4. champ calculé d'après 2 champs calculé
    Par lambac dans le forum IHM
    Réponses: 11
    Dernier message: 05/03/2009, 09h22
  5. Réponses: 17
    Dernier message: 21/04/2008, 01h21

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