-3

Ich möchte rekursive Abfrage verwenden (es kann cte oder irgendetwas sein), wo ich versuche, den Executive-Bericht zu ziehen - wo ich einen Angestelltennamen eingeben und ich möchte alle Hierarchie bezogen auf Diese Mitarbeiter beginnen mit dem Top-Level-Mitarbeiter (beginnend mit CEO) und gehen dann nach unten.T-SQL- Rekursive Abfrage- Mitarbeiterhierarchie

Zum Beispiel:

Wenn ich Eingabe der Mitarbeiternamen Celia, sollte der Bericht wie folgt aussehen:

CEO 
Employees reporting to CEO , let's say MgrX 
Employees reporting to MgrX- let's say MgrY 
Employees reporting to MgrY - let's say MgrZ 

alle Mitarbeiter zu MgrZ Berichterstattung einschließlich Celia (Eingabeparameter).

Die Abfrage ich zu verwenden Ich versuche:

  with cte1 as 
      (

      select 
      pa.PERSNBR 
      ,pa.AUTHCD 
      ,pu.VALUE 
      ,hr.File# 
      ,hr.[Payroll Name] 
      ,hr.[Reports To File#] 
      ,hr.[Reports To Name] 
      ,hr.[EMC#] 
      ,hr.[EMC Name] 

      from 
        [DNA_Staging].[dbo].[PERSAUTH] pa 
      join [DNA_Staging].[dbo].[PERSEMPL] pe 
       on pa.PERSNBR = pe.PERSNBR 
      join [DNA_Staging].[dbo].[PERSUSERFIELD] pu 
       on pe.PERSNBR = pu.PERSNBR 
       and pu.USERFIELDCD = 'EFNR' 
       and GETDATE() < isnull(pe.inactivedate,getdate()+1) 
       join [HR_Staging].[dbo].[HR_EmployeeHierarchyStaging] hr 
       on pu.VALUE = substring(hr.File#,2,6) 
       or pu.VALUE = substring(hr.File#,3,6) 

       ), 

       -- find all the data for input payroll name in the parameter 
       cte2 as (select * 
       FROM cte1 where [Payroll Name] = 'Acain, Celia T'), 
+2

Bitte lesen Sie [diese] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a -public-forum /) für einige Tipps zur Verbesserung Ihrer Frage. Tipp: Es sollte eine Frage enthalten. – HABO

Antwort

0

Ein einfaches Beispiel für Ihre Frage (Sie keine Datenproben oder Ausgabebeispiele bieten haben, so ...):

DECLARE @name nvarchar(20) = 'Darkwater' 

;WITH emplevels AS (
SELECT * 
FROM (VALUES 
(1, 'CEO'), 
(2, 'MgrX'), 
(3, 'MgrY'), 
(4, 'MgrZ') 
) as t(eid, who) 
), 
people AS (--people and there levels 
SELECT * 
FROM (VALUES 
(1, 'Smith', 1), 
(2, 'Wake', 2), 
(3, 'Cartman', 3), 
(4, 'Sanders', 4), 
(5, 'MacCormic', 1), 
(6, 'Malkovich', 2), 
(7, 'Whatever', 2), 
(8, 'Darkwater', 3), 
(9, 'Leto', 4) 
) as t(pid, name, eid) 
), 
dep AS (--dependences of levels 
SELECT * 
FROM (VALUES 
(1,1), --CEO - CEO 
(1,2), --CEO - MgrX 
(2,3), --MgrX - MgrY 
(3,4) --MgrY - MgrZ 
)as t(eid1,eid2) 
), 
hier as (-- get the hierarchy 
SELECT d.eid1, 
     d.eid2 
FROM dep d 
LEFT JOIN people p ON d.eid2 = p.eid 
where name = @name 
UNION ALL 
SELECT d.eid1, 
     d.eid2 
FROM dep d 
INNER JOIN hier h ON d.eid2 = h.eid1 
WHERE d.eid2 != d.eid1 
) 
--here comes heads and who there are 
SELECT p.name AS Head, 
     e.who AS WhoIs 
from hier h 
LEFT JOIN people p ON p.eid = h.eid1 
LEFT JOIN emplevels e ON e.eid = p.eid 
ORDER BY e.eid 

Ergebnis für Darkwater (er ist MgrY). Wir haben alle MgrX und CEO ‚s:

Head  WhoIs 
--------- ----- 
Smith  CEO 
MacCormic CEO 
Wake  MgrX 
Malkovich MgrX 
Whatever MgrX 

(5 row(s) affected)