2015-04-07 8 views
-2

У меня хранилась процедура, в которой я получаю данные. Между желаемыми месяцами от пользователя.Сводная процедура Суммирование строк с одинаковым идентификатором

Q1. Я хочу показать имя пользователя вместо memberID. Как получить имя участника из главной таблицы участников?

Q2. Во-вторых, я хочу добавить эти строки (суммирование). Как и в каждой строке, сохраняется значение int. Я хочу, чтобы те же строки с одинаковым идентификатором участника добавляли и показывали мне одну строку для каждого типа. , например, если есть три входа для посетителей в 3 месяца я не хочу, три отдельные строки отображать 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 
+0

читать о функциях объединения и агрегации –

+0

Хорошо ... Конечно ... –

ответ

1

После просмотра кода и веб-страницы. вам нужно что-то подобное.

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 
Смежные вопросы