【发布时间】:2016-12-20 11:36:09
【问题描述】:
给定的查询如何正确,因为它在 with 子句中使用了 T1,并且在 WITH 子句完成后声明了 T1。
WITH T1(Emp,Manager,Salary) AS
(
SELECT tt2.[Emp],tt2.[Manager],tt2.[Salary]
FROM [YourTable] AS tt1
RIGHT OUTER JOIN [YourTable] AS tt2 ON tt1.[Emp]=tt2.[Manager]
WHERE tt1.[Emp] is NULL
UNION ALL
SELECT r.[Emp],T1.[Manager],r.[Salary]
FROM [YourTable] AS r
INNER JOIN T1 ON r.[Manager]=T1.[Emp]
)
SELECT [Manager],SUM([Salary]) AS Salary
FROM T1
GROUP BY [Manager]
ORDER BY SUM([Salary]) DESC
以上查询是对以下问题的回答 -
我有列(员工、经理、工资)的表格。需要在一条 SQL 中计算出所有高层管理者对应的所有员工的总工资。例如
Input table is :
Emp Manager Salary
A T 10
B A 11
C F 13
D B 5
结果应该是:
Top-Lvl Manager Salary(agg)
T 26
F 13
经理-员工分层可以有多个层次。
【问题讨论】:
-
我删除了不兼容的数据库标签。请标记您真正使用的数据库。
-
此查询是使用 CTE(命令表表达式)构建的。有关这方面的更多信息,请通过此链接-codeproject.com/Articles/275645/CTE-In-SQL-Server
标签: sql sql-server database database-management