Sql server 显示每个客户每周预约次数的SSRS报告(布局)
我想创建一个报告,以日历类型的布局显示每个客户每周的会议次数。我正在使用SQLServerReportingServices2005 为了简单起见,假设我们只有这两个表: 客户Sql server 显示每个客户每周预约次数的SSRS报告(布局),sql-server,reporting-services,Sql Server,Reporting Services,我想创建一个报告,以日历类型的布局显示每个客户每周的会议次数。我正在使用SQLServerReportingServices2005 为了简单起见,假设我们只有这两个表: 客户 身份证 名字 预约 身份证 主题 日期 使用这种布局生成报告的最有效方法是什么 | WEEK # CUSTOMER | 1| 2| 3| 4| 5| 6|...|52| TOTAL ---------+-+-+-+-+-+-+--+--+---+--+------ Cust A | 0| 2
- 身份证
- 名字
- 身份证
- 主题
- 日期
| 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周开始。我没有列举所有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