2010-02-01 6 views
0

일정 유형의 레이아웃에서 매주 고객 당 회의 수를 표시하는 보고서를 만들려고합니다. 나는 단순하게하기 위해 서비스 2005주당 고객 당 약속 수를 표시하는 SSRS 보고서 (레이아웃)

보고 SQL Server를 사용하고있어 우리는이 두 개의 테이블이 있다고 가정 할 수 있습니다 :

고객

  • 아이디
  • 이름을

예약

  • 아이디
  • 주제
  • 날짜

이 레이아웃 보고서를 생성 할 수있는 가장 효율적인 방법은 무엇입니까?

  | WEEK # 
CUSTOMER | 1| 2| 3| 4| 5| 6|...|52| TOTAL 
---------+-+-+-+-+-+-+--+--+---+--+------ 
Cust A | 0| 2| 0| 1| 0| 0|...| 1| 4 
Cust B | 0| 1| 0| 1| 1| 0|...| 0| 3 
Cust C | 0| 0| 0| 1| 0| 0|...| 0| 1 
Cust D | 1| 0| 0| 0| 1| 0|...| 0| 2 

편집 : 몇 년은 53

답변

1

나는 모든 (52) (53) 주를 열거 생략하고 그냥 테스트 데이터를 넣어 사람을 열거 주 #로 시작 수도 기억한다. 바라기를 당신은 아이디어를 얻는다. 에서

DECLARE @Customer TABLE 
(
    [Id] int not null primary key, 
    [Name] nvarchar(50) not null 
); 

DECLARE @Appointment TABLE 
(
    [Id] int not null primary key, 
    [CustomerId] int not null, 
    [OccurredOn] datetime not null DEFAULT getdate(), 
    [Subject] nvarchar(50) not null 
); 


INSERT INTO @Customer 
SELECT 1, 'Aaron Burr' UNION ALL 
SELECT 2, 'John Adams' UNION ALL 
SELECT 3, 'George Washington'; 

INSERT INTO @Appointment 
SELECT 1, 1, '2009-01-04', 'Ants in the pants' UNION ALL 
SELECT 2, 1, '2009-02-04', 'Follow up' UNION ALL 
SELECT 3, 1, '2009-07-20', 'Check-up' UNION ALL 
SELECT 4, 2, '2009-02-05', 'Wellness Check' UNION ALL 
SELECT 5, 2, '2009-11-26', 'Private' UNION ALL 
SELECT 6, 2, '2009-06-03', 'Stubbed Toe' UNION ALL 
SELECT 7, 3, '2009-11-27', 'Toothache' UNION ALL 
SELECT 8, 3, '2009-11-28', 'Crown'; 

WITH AggregateAppointments AS 
(
    SELECT  c.Id, 
       c.Name, 
       DATEPART(wk, a.OccurredOn) [Week], 
       COUNT(c.Id) [Count] 
    FROM  @Appointment a 
    JOIN  @Customer c ON a.CustomerId = c.Id 
    GROUP BY c.Id, c.Name, DATEPART(wk, a.OccurredOn) 
), 

PivotAppointments AS 
(
    SELECT  [Id], 
       [Name], 
       ISNULL([53], 0) [53], 
       ISNULL([2], 0) [2], 
       ISNULL([6], 0) [6], 
       ISNULL([23], 0) [23], 
       ISNULL([30], 0) [30], 
       ISNULL([48], 0) [48] 
    FROM  AggregateAppointments 
    PIVOT  (
     SUM([Count]) 
     FOR [Week] IN ([2], [6], [23], [30], [48], [53]) 
    ) as [PivotAppointments] 
) 

SELECT  *, 
       [53]+[2]+[6]+[23]+[30]+[48] [Total] 
FROM   PivotAppointments 

결과 :

[Id] [Name]    [53] [2] [6] [23] [30] [48] [Total] 
------------------------------------------------------------------ 
1 Aaron Burr   0  1 1 0  1  0  3 
2 George Washington 0  0 0 0  0  2  2 
3 John Adams   0  0 1 1  0  1  3 
+0

우수 대답! 고맙습니다! –