我正在尝试创建一个组合其所有父名称的列。
例如。
项目:
ID PARENT_ID NAME COMBINED_NAME
1 A A
2 1 B B / A
3 2 C C / B / A
我尝试过使用connect by但是甚至没能得到我需要的东西。
SELECT TP.PROJECT_SEQ,
LEVEL,
SYS_CONNECT_BY_PATH(TP.PROJECT_NAME, ' / ') AS PROJECT_DIR,
TP.PROJECT_NAME,
TP.PARENT_SEQ
FROM TFS_PROJECTS TP
START WITH TP.PROJECT_SEQ IN (SELECT TPSUB.PROJECT_SEQ FROM TFS_PROJECTS TPSUB)
CONNECT BY PRIOR TP.PROJECT_SEQ = TP.PARENT_SEQ
我终于解决了!不,谢谢人们在stackoverflow上删除,删除和持有问题。我真的感谢没有人给我答案,因为我从中学到了很多。
无论如何,如果有人遇到类似的问题,他们需要解决。
SELECT TP.PROJECT_SEQ,
TP.PROJECT_NAME,
LTRIM(MAX(SYS_CONNECT_BY_PATH(TP.PROJECT_NAME, ' / ')) KEEP (DENSE_RANK FIRST ORDER BY LEVEL DESC), ' / ') AS PROJECT_DIR
FROM TFS_PROJECTS TP
CONNECT BY PRIOR TP.PROJECT_SEQ = TP.PARENT_SEQ
GROUP BY TP.PROJECT_SEQ,
TP.PROJECT_NAME
我使用MAX / KEEP来获取根项目。我并不擅长解释它,但你可以对此进行逆向工程并理解发生了什么。也许其中一个坚持这个的人实际上可以向前解释,而不是点击删除,按住或删除问题按钮。这几乎就像你通过这样做获得积分一样。
答案 0 :(得分:1)
您可以使用以下代码
begin
update TFS_PROJECTS t set t.COMBINED_NAME = null;
update TFS_PROJECTS t set t.COMBINED_NAME = t.NAME where id = 1;
begin
for i in (select *
from (select e.id, e.PARENT_ID, e.NAME , e.COMBINED_NAME
from TFS_PROJECTS e
connect by prior e.id = e.PARENT_ID
start with e.id = 1)
where id != 1) loop
update TFS_PROJECTS
set COMBINED_NAME =i.Name ||'/'||
(select COMBINED_NAME from TFS_PROJECTS where id =i.PARENT_ID)
where id = i.id;
commit;
end loop;
end
答案 1 :(得分:0)
vec3 lightToFrag = light.position - fragPos
float lenLightToFrag = length(lightToFrag)
vec3 normLightToFrag = normalize(lightToFrag)
float shadow = texture(depthTexture, vec4(normLightToFrag, lightToFrag))
我使用DENSE_RANK和ORDER BY LEVEL DESC来获取每个项目的完整路径。然后KEEP和FIRST允许我保持尽可能最高级别的完整路径。我并不擅长解释它,但有人可以在评论中对此进行扩展。