-1

对不起,如果这个问题已经被问到了。请重定向我。

对不起,如果它被搁置。
只是为了澄清我的问题。

这是我的详细信息。

我有 1 个名为 T1 的视图,它有 3 个名为 ID(NUM)、PARENT_ID(NUM) 和 COLOR(NUM) 的列。

*ID 列是 PARENT_ID 列的子代
*COLOR 列是 ID 列的指定颜色(最高 4000、最低 3000、2000、最低 1000)
*ID 为 1 的行,父 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 获得了最大颜色,但它只反映了它的直接父颜色,而不是它的祖父颜色。

请指教..

4

1 回答 1

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.
于 2014-02-20T09:30:18.110 回答