【发布时间】:2014-07-18 16:57:38
【问题描述】:
我继承了一些按部门统计团队人数的脚本;当前脚本为每个单独的部门创建一个表格,之前的用户会将数据复制/粘贴到 Excel 中。我的任务是将此报告提取到 SSRS,因此我需要按团队为所有部门提供一张表格。
当前表
+-------+-----------+---------+
| Dept | DataMatch | Team |
+-------+-----------+---------+
| 01 | 4687Joe | Dodgers |
| 01 | 3498Cindy | RedSox |
| 01 | 1057Bob | Yankees |
| 01 | 0497Lucy | Dodgers |
| 02 | 7934Jean | Yankees |
| 02 | 4584Tom | Dodgers |
+-------+-----------+---------+
期望的结果
+-------+---------+--------+---------+
| Dept | Dodgers | RedSox | Yankees |
+-------+---------+--------+---------+
| 01 | 2 | 1 | 1 |
| 02 | 1 | 0 | 1 |
+-------+---------+--------+---------+
DataMatch 字段是我将计算的唯一标识符。我首先将每个部门包装在 CTE 中,但是这导致 Dept 作为列,这不适用于我的报告,因此我需要转置我的结果,但我无法弄清楚。有 60 个部门,我的查询变得很长。
当前查询
SELECT Dept, DataMatch, Team INTO #temp_Team
FROM TeamDatabase
WHERE Status = 14
AND Team <> 'Missing'
;WITH A_cte (Team, Dept01)
AS
(
SELECT Team
, COUNT(DISTINCT datamatch) AS 'Dept01'
FROM #temp_Team
WHERE Dept = '01'
GROUP BY Team
),
B_cte (Team, Dept02) AS
(
SELECT Team
, COUNT(DISTINCT datamatch) AS 'Dept02'
FROM #temp_Team
WHERE Dept = '02'
GROUP BY Team
)
SELECT A_cte.Team
, A_cte.Dept01
, B_cte.Dept02
FROM A_cte
INNER JOIN B_cte
ON A_cte.Team=B_cte.Team
这会导致:
+----------------------------+-------+-------+
| Team | Prg01 | Prg02 |
+----------------------------+-------+-------+
| RedSox | 144 | 141 |
| Yankees | 63 | 236 |
| Dodgers | 298 | 196 |
+----------------------------+-------+-------+
我觉得在我已经很长的查询上使用数据透视表会过度并且会影响性能,因为 60 个部门有超过 30,000 行。
我缺少什么(很可能是基本的)步骤?
TL;DR - 我如何按团队统计人数并按部门列出?
【问题讨论】:
-
您为什么要事先格式化此数据集?只需将其用作报告的源并实际使用 SSRS 中的工具来获得您想要的结果(这就是 tablix 的用途)
标签: sql sql-server reporting-services sql-server-2008-r2