私は再帰的なCTEを使用して自己参照の従業員テーブルを拡張し、ユーザーと重大度で集計された欠陥の結果セットを構築するSQLを持っています。ロールアップロジックを持つ再帰的な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]
iがPARAMとしてユーザー名をとり、生成豚肉を持つようにしたい:ここ
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です:ここ
は私のCTEであります上記のSQLのような2つの拡張機能の結果:
これは、パラメータとして渡されたユーザーをリストするために必要です結果セットの最初のレコードとしてリストされます。
マネージャに報告する従業員は、1つのレベルしか表示せず、フルツリーを表示しないようにする必要があります。最初のレベルは、すべてのレベル1のユーザーにロールアップされた人に割り当てられている根本的な欠陥のロールアップでなければなりません。言い換えれば、今のようにマネージャーの下にツリー全体を表示する必要はありません。私は1つのレベルだけを表示する必要がありますが、すべてのレベルの欠陥の合計が必要です。
アイデア?
これはその仕組みです。 – kacalapy