ฉันต้องการสร้างรายการของผู้ใช้'uruguay. kgm หัสโปรแกรมกันซะหน่อย ถ้าผู้ใช้ไม่ได้มีรหัสเอาของมันจัดการรหัสและดังนั้นในห้องลำดับชั้นในผังต้นไม้.
ที่เริ่มต้นโต๊ะดูเหมือนนี้:
manager emp code
-----------------------
boss subboss AAA
boss subsub SUBCODE
subboss john ABC
subboss alan (null)
(null) boss ZZZ
subsub steve (null)
steve rick (null)
CREATE TABLE Users
(
[manager] varchar(10),
[emp] varchar(10),
[code] varchar(10)
);
INSERT INTO Users ([manager], [emp], [code])
VALUES
('boss', 'subboss', 'AQQ'),
('boss', 'subsub', 'SUBSUB'),
('subboss', 'john', 'ABC'),
('subboss', 'alan', null),
(null, 'boss', 'ZZZ'),
('subsub', 'steve', null),
('steve', 'rick', null);
ที่ต้องการผลลัพธ์นี้คือ:
manager emp code
------------------------
boss subboss AAA
boss subsub SUBCODE
subboss john ABC
subboss alan AAA
(null) boss ZZZ
subsub steve SUBCODE
steve rick SUBCODE
ของความพยายามครั้งแรกคือ:
select
manager, emp,
coalesce(code, (select code from Users u1 where u.manager = u1.code))
from
Users u;
แต่มันกลับมาเพียงโดยตรงจัดการรหัส
ฉันจะซาบซึ้งมากอนเคล็ดลับสะบัดวิธีที่จะทำมัน recursively กับ CTE.