结合其所有父名称

时间:2018-01-04 19:50:44

标签: sql oracle oracle11g

我正在尝试创建一个组合其所有父名称的列。

例如。

项目:

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来获取根项目。我并不擅长解释它,但你可以对此进行逆向工程并理解发生了什么。也许其中一个坚持这个的人实际上可以向前解释,而不是点击删除,按住或删除问题按钮。这几乎就像你通过这样做获得积分一样。

2 个答案:

答案 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允许我保持尽可能最高级别的完整路径。我并不擅长解释它,但有人可以在评论中对此进行扩展。