【发布时间】:2010-12-07 16:26:15
【问题描述】:
我有一个 SQL,它使用递归 CTE 来扩展自引用员工表,构建一个按用户和严重性级别聚合的缺陷结果集。
这是我的 CTE:
ALTER FUNCTION [dbo].[fnGetEmployeeHierarchyByUsername]
(
@NTID varchar(100) = null
)
RETURNS TABLE
AS
RETURN
(
WITH yourcte AS
(
SELECT EmployeeId, ManagerNTID, ManagerID, NTID, FullName--, Name
FROM Employees
WHERE NTID = @NTID
UNION ALL
SELECT e.EmployeeId, e.ManagerNTID, e.ManagerID, e.NTID, e.FullName--, e.Name
FROM Employees e
JOIN yourcte y ON e.ManagerNTID = y.NTID
)
SELECT EmployeeId, ManagerID, NTID, FullName--, Name
FROM yourcte
)
这是我用于汇总用户缺陷的 SQL:
SELECT e.FullName, Urgent, High, Medium, Low
FROM fnGetEmployeeHierarchyByUsername ('ssalvati') e
LEFT OUTER JOIN(
SELECT [AssignedTo],
SUM([1-Urgent]) AS Urgent,
SUM([2-High]) AS High,
SUM([3-Medium]) AS Medium,
SUM([4-Low]) AS Low
FROM (SELECT [AssignedTo],[BusinessSeverity] FROM Defects WHERE Status <> 'Closed') D
PIVOT (COUNT([BusinessSeverity]) FOR [BusinessSeverity] IN ([1-Urgent],[2-High],[3-Medium],[4-Low])) V
GROUP BY [AssignedTo]) AS def
ON e.ntid = def.[AssignedTo]
我想要一个将用户名作为参数的 porc,并生成类似于上述 SQL 的结果,但具有 2 个增强功能:
我需要它来列出作为参数传入的用户,以列为结果集的第一条记录。
我需要向经理报告的员工只显示一层深度,而不是显示完整的树。第一级应该是所有底层缺陷的汇总,这些缺陷分配给汇总到所有第一级用户的人员。换句话说,我不想像现在这样在管理器下显示一整棵树,我需要它只显示一个深度但所有级别的缺陷总和。
想法?
【问题讨论】:
标签: sql sql-server-2005