TSQL递归查询更新临时表
我有一个查询,它递归地通过我的员工组织,得到一个所有向副总裁汇报的人的列表。此查询正在按预期工作:TSQL递归查询更新临时表,sql,sql-server,tsql,stored-procedures,recursion,Sql,Sql Server,Tsql,Stored Procedures,Recursion,我有一个查询,它递归地通过我的员工组织,得到一个所有向副总裁汇报的人的列表。此查询正在按预期工作: DECLARE @pit AS DATETIME = GETDATE(); DECLARE @table TABLE ( mgrQID VARCHAR (64) , QID VARCHAR (64) , NTID VARCHAR (64) , FullName VARCHAR (256), lvl INT
DECLARE @pit AS DATETIME = GETDATE();
DECLARE @table TABLE (
mgrQID VARCHAR (64) ,
QID VARCHAR (64) ,
NTID VARCHAR (64) ,
FullName VARCHAR (256),
lvl INT ,
metadate DATETIME ,
totalCount INT );
WITH empList (mgrQID, QID, NTID, FullName, lvl, metadate)
AS (SELECT TOP 1 mgrQID,
QID,
NTID,
FirstName + ' ' + LastName,
0,
Meta_LogDate
FROM dbo.EmployeeTable_Historical
WHERE QID IN (SELECT director
FROM dbo.attritionDirectors)
AND Meta_LogDate <= @pit
ORDER BY Meta_LogDate DESC
UNION ALL
SELECT b.mgrQID,
b.QID,
b.NTID,
b.FirstName + ' ' + b.LastName,
lvl + 1,
b.Meta_LogDate
FROM empList AS a CROSS APPLY dbo.Fetch_DirectsHistorical_by_qid (a.QID, @pit) AS b)
-- Insert into the counts table
INSERT INTO @table (mgrQID, QID, NTID, FullName, lvl, metadate, totalCount)
SELECT empList.mgrQID,
empList.QID,
empList.NTID,
empList.FullName,
empList.lvl,
empList.metadate,
'0'
FROM empList
ORDER BY lvl
OPTION (MAXRECURSION 10);
我的问题是
如何使用第二次查询得到的计数更新@temp totalCount?QID和Direct是这两个字段的共同点。尝试以下方法:
update t
set t.totalCount = a.count(*) - 1
from a
join @temp t
on a.Direct = t.QID
group by a.direct, t.QID
option (maxrecursion 10)
update t
set t.totalCount = a.count(*) - 1
from a
join @temp t
on a.Direct = t.QID
group by a.direct, t.QID
option (maxrecursion 10)