Sql server 具有相同ID的行的存储过程求和

Sql server 具有相同ID的行的存储过程求和,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个存储过程,在这个存储过程中,我从用户那里获取所需月份之间的数据 问题1。我想显示Membername而不是memberID。如何从成员主表中获取成员名称 问题2。其次,我想添加这些行的总和。每行存储一个int值。我希望将具有相同成员ID的相同行相加,并为每种类型显示一行。 例如,如果三个月内有三个访客条目,我不希望三个单独的行显示1,1,1,而是希望一个值为3的行 USE [MTS] GO /****** Object: StoredProcedure [dbo].[sp_MTS_Me

我有一个存储过程,在这个存储过程中,我从用户那里获取所需月份之间的数据

问题1。我想显示Membername而不是memberID。如何从成员主表中获取成员名称

问题2。其次,我想添加这些行的总和。每行存储一个int值。我希望将具有相同成员ID的相同行相加,并为每种类型显示一行。 例如,如果三个月内有三个访客条目,我不希望三个单独的行显示1,1,1,而是希望一个值为3的行

USE [MTS]
GO
/****** Object:  StoredProcedure [dbo].[sp_MTS_MemberTracking_generateReport]    Script Date: 07-04-2015 14:48:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- sp_MTS_MemberTracking_generateReport '01/01/2015','03/01/2015'
-- =============================================
ALTER PROCEDURE [dbo].[sp_MTS_MemberTracking_generateReport]
    -- Add the parameters for the stored procedure here
@monthYearFrom datetime , @monthYearTo datetime 
AS

select MemberId,TrackingId,MonthYear, AttendanceInFormalMixer,AttendanceInFbb,GoodKarmaCredit,CupOfCofee,Business,Training,Visitors
from [dbo].[MTS_MemberTracking] MtsTracking
where MtsTracking.MonthYear >= @monthYearFrom and  MtsTracking.MonthYear <= @monthYearTo

查看代码和网页后。你需要这样的东西

ALTER PROCEDURE [dbo].[sp_MTS_MemberTracking_generateReport]
    -- Add the parameters for the stored procedure here
@monthYearFrom datetime , @monthYearTo datetime 
AS

    select max(mtsmem.Name) Name,MtsTracking.MemberId,--TrackingId,MonthYear,
     sum(Convert(int,AttendanceInFormalMixer))*10 AttendanceInFormalMixer,
     sum(Convert(int,AttendanceInFbb))*10 AttendanceInFbb,
     sum(CASE WHEN GoodKarmaCredit <> 0 THEN 10 ELSE 0 END) GoodKarmaCredit,
     sum(CASE WHEN CupOfCofee <2 THEN CupOfCofee*5 ELSE 10 END) CupOfCofee,
     sum(CASE WHEN Convert(int,Business)<>0 THEN 10 ELSE 0 END) Business,
     sum(CASE WHEN Training<>0 THEN 10 ELSE 0 END) Training,
     sum(CASE WHEN Visitors<>0 THEN 10 ELSE 0 END) Visitors,

     convert(decimal(10,2),(sum(Convert(int,AttendanceInFormalMixer))*10 +
     sum(Convert(int,AttendanceInFbb))*10 +
     sum(CASE WHEN GoodKarmaCredit <> 0 THEN 10 ELSE 0 END) +
     sum(CASE WHEN CupOfCofee <2 THEN CupOfCofee*5 ELSE 10 END) +
     sum(CASE WHEN Convert(int,Business)<>0 THEN 10 ELSE 0 END) +
     sum(CASE WHEN Training<>0 THEN 10 ELSE 0 END) +
     sum(CASE WHEN Visitors<>0 THEN 10 ELSE 0 END) )*1.00/7)

     UserScore
    from [dbo].[MTS_MemberTracking] MtsTracking
    inner join MTS_Members mtsmem on MtsTracking.MemberId = mtsmem.MemberId
    where MtsTracking.MonthYear >= @monthYearFrom and  MtsTracking.MonthYear <= @monthYearTo

group by MtsTracking.MemberId

阅读有关连接和聚合函数的内容Sok。。。当然可以。。。