很抱歉,如果已经提出这个问题。请重定向我。
抱歉,如果它处于暂停状态。
只是为了澄清我的问题。
这是我的详细信息。
我有1个名为T1的视图,它有3列名为ID(NUM),PARENT_ID(NUM)和COLOR(NUM)。
* ID列是PARENT_ID列的子项
* COLOR列是ID列的指定颜色(最高4000,3000,2000,1000最低)
* ID为1的行,PARENT ID 0为最高/根级别。
*我没有ID为0的行;
我的问题是,我不知道如何:
1.根据子颜色的最高颜色值更改父颜色。
例如:id为2的行必须为4000色(4000 [row id 4]> 3000 [row id 5])。
2.接下来,还根据父母的最高颜色改变祖父母的颜色。如果盛大的父母存在,那么它也必须根据祖父母的最高颜色更新。
ID parent ID color
1 0 1000
2 1 1000
3 1 2000
4 2 4000
5 2 3000
输出应该是。
id color
1 4000
2 4000
3 2000
4 4000
5 3000
我正在使用Oracle 11g。
另请注意,我的T1视图也是使用Connect By连接的多个表的结果。我已经设法使用Connect By获得最大颜色,但它只反映了它的直接父颜色而不是它的祖父颜色。
请建议..
答案 0 :(得分:0)
WITH tab
AS (SELECT 1 AS ID, 0 AS parent_ID, 1000 AS color FROM DUAL
UNION
SELECT 2 AS ID, 1 AS parent_ID, 1000 AS color FROM DUAL
UNION
SELECT 3 AS ID, 1 AS parent_ID, 2000 AS color FROM DUAL
UNION
SELECT 4 AS ID, 2 AS parent_ID, 4000 AS color FROM DUAL
UNION
SELECT 5 AS ID, 2 AS parent_ID, 3000 AS color FROM DUAL)
SELECT temp_id id, MAX (color) color
FROM ( SELECT id,
parent_id,
color,
CONNECT_BY_ROOT id temp_id
FROM tab
CONNECT BY PRIOR id = parent_id)
GROUP BY temp_id
ORDER BY 1 ASC;
ID COLOR
---------- ----------
1 4000
2 4000
3 2000
4 4000
5 3000
5 rows selected.