父子和销售汇总
我有员工表和名为“管理者”的列。 我想将员工的实际数字和目标数字汇总到经理到总监等,
create table
(
empid int
,Name varchar(255)
,actual decimal(38,2)
,target decimal(38,2)
,managedby int
)
以下是迄今为止所做的事情:
with emp(Period,Label,[name],Unit,Department,[Group],Division,Managed_By,Manager,Actual,Target) as
(
select
a.DW_Time_key Period
,Label
,b.name
,b.Unit
,b.Department
,b.[Group]
,b.Division
,b.Managed_By
,b.Manager
,sum(a.Actual) Actual
,sum(a.Budget) Target
from
KPI_EDW.dbo.Fact_ASO_SCORECARD a
,KPI_EDW.dbo.DIM_Employee b
where
a.DW_EMPLOYEE_KEY = b.DW_EMPLOYEE_KEY
and DW_KPI_KEY = 1008
and DW_Time_key = 200906
--and DW_Division_KEY = 1003
group by
a.DW_Time_key
,b.name
,b.Unit
,b.Department
,b.[Group]
,b.Division
,b.Managed_By
,b.Manager
,b.Label
)
,CTE (Label,[Name],[Manager], Managed_By,Actual,Target,[level]) as
(
select cast(Label as int) Label,[Name],[Manager], null,Actual,Target,0
from emp
where cast(Label as int) = '582'
union all
select
cast(h2.Label as int) Label
,h2.[Name]
,h2.[Manager]
,cast(h2.Managed_By as int) Managed_By
,h2.Actual
,h2.Target
,[level] + 1
from emp h2
inner join cte
on cast(h2.Managed_By as int) = cast(cte.Label as int)
)
select *
from cte
order by [level]
提前致谢
I have table of employees and column called managedby.
I want to roll actual and target figures up from employee to lead to manager to director and etc.
create table
(
empid int
,Name varchar(255)
,actual decimal(38,2)
,target decimal(38,2)
,managedby int
)
and below is what have done so far:
with emp(Period,Label,[name],Unit,Department,[Group],Division,Managed_By,Manager,Actual,Target) as
(
select
a.DW_Time_key Period
,Label
,b.name
,b.Unit
,b.Department
,b.[Group]
,b.Division
,b.Managed_By
,b.Manager
,sum(a.Actual) Actual
,sum(a.Budget) Target
from
KPI_EDW.dbo.Fact_ASO_SCORECARD a
,KPI_EDW.dbo.DIM_Employee b
where
a.DW_EMPLOYEE_KEY = b.DW_EMPLOYEE_KEY
and DW_KPI_KEY = 1008
and DW_Time_key = 200906
--and DW_Division_KEY = 1003
group by
a.DW_Time_key
,b.name
,b.Unit
,b.Department
,b.[Group]
,b.Division
,b.Managed_By
,b.Manager
,b.Label
)
,CTE (Label,[Name],[Manager], Managed_By,Actual,Target,[level]) as
(
select cast(Label as int) Label,[Name],[Manager], null,Actual,Target,0
from emp
where cast(Label as int) = '582'
union all
select
cast(h2.Label as int) Label
,h2.[Name]
,h2.[Manager]
,cast(h2.Managed_By as int) Managed_By
,h2.Actual
,h2.Target
,[level] + 1
from emp h2
inner join cte
on cast(h2.Managed_By as int) = cast(cte.Label as int)
)
select *
from cte
order by [level]
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
听起来您需要一种方法来汇总某个经理下的所有员工以及他们下的每个人的列表的实际值和目标值,依此类推,以获得整个分支机构的总计。 那是对的吗? 我在 SQL Server 中编写了一个递归函数来执行此操作。 如果我正确理解了问题,我可以发布它。
这里是:
It sounds like you need a way to sum the actual and target values for a list of all the employees under a certain manager as well as everyone under them, and so on, to get the totals for an entire branch. Is that correct? I wrote a recursive function to do that in SQL Server. I can post it if I am understanding the problem correctly.
Here it is: