ฉันมีหัวหน้างานคนใด?
ในแบบฝึกหัดนี้ เราต้องการหาเส้นทางจากหัวหน้าสูงสุดในลำดับชั้นลงมาจนถึงพนักงานในระดับล่าง โดยต้องนำข้อมูลที่ได้จากแต่ละขั้นตอนมารวมไว้ในฟิลด์เดียวกัน ทำได้โดยการนำ ID มาเชื่อมกันด้วย CAST() เพื่อแปลงตัวเลขเป็น string ตัวอย่างเช่น CAST(ID AS VARCHAR(MAX)) ใช้แปลง ID จากชนิดตัวเลขเป็น char
งานในครั้งนี้คือการหาเส้นทางของพนักงาน Chris Feierabend ที่มี ID=18 และ Jasmin Mentil ที่มี ID=16 ขึ้นไปจนถึงจุดสูงสุดขององค์กร ผลลัพธ์ที่ได้ควรมีรูปแบบดังนี้: boss_first_level -> boss_second_level ... โดยให้เลือก ID ของพนักงาน ไม่ใช่ชื่อ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Hierarchical and Recursive Queries in SQL Server
คำแนะนำการฝึกหัด
- กำหนดค่าเริ่มต้นของ
Pathให้เป็นIDของ supervisor (0) และกำหนดเงื่อนไขเริ่มต้นของ recursion - ใช้
UNIONเชื่อม anchor member และกำหนดฟิลด์ของ recursive member (ID,Name,Supervisor) - เพิ่ม ID ของ supervisor (
Supervisor) ต่อท้ายPathในแต่ละขั้นตอน - เลือก ID ของพนักงาน
Chris FeierabendและJasmin Mentilใน CTE
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
WITH employee_Hierarchy AS (
SELECT
ID,
NAME,
Supervisor,
-- Initialize the Path with CAST
___('___' AS VARCHAR(MAX)) as Path
FROM employee
WHERE Supervisor = 0
-- UNION the anchor query
___ ALL
-- Select the recursive query fields
SELECT
emp.___,
emp.___,
emp.___,
-- Add the supervisor in each step. CAST the supervisor.
Path + '->' + ___(emp.___ AS VARCHAR(MAX))
FROM employee emp
INNER JOIN employee_Hierarchy
ON emp.Supervisor = employee_Hierarchy.ID
)
SELECT Path
FROM employee_Hierarchy
-- Select the employees Chris Feierabend and Jasmin Mentil
WHERE ___ = 16 OR ID = ___;