2010-02-01 80 views
0

我想创建一份报告,显示日历类型布局中每位客户每周会议的数量。我使用的是SQL Server报表服务2005SSRS报告显示每位客户每周的约会数量(布局)

为了简单起见,假设我们只有这两个表:

客户

  • 编号
  • 名称

预约

  • 编号
  • 主题
  • 日期

什么是产生这种布局报表的最有效的方法是什么?

  | 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

出色答卷!谢谢! – 2010-02-02 08:04:30