原始数据
id code
1 112233
2 112200
3 110000
4 120000想要得到的数据
id code
1 112233
1 112200
1 110000
2 112200
2 110000
3 110000
4 120000请各位高手帮看看!
id code
1 112233
2 112200
3 110000
4 120000想要得到的数据
id code
1 112233
1 112200
1 110000
2 112200
2 110000
3 110000
4 120000请各位高手帮看看!
不知是否可以理解成分层分级的关系?
即:id=1 以下有2,3,4 的最上一层,
id=2 以下有3,4两层
。。
id=1 以下有2,3 这两层,
id=2 以下有 3这一层。
但是这里好像没有一个字段标识出id与id之间的层级关系啊???请LZ描述清楚。
code字段分3级,都是6位的。从后往前二位判断(00标识)来分级别,如果是112233,就是3级别,就分为3行数据, 如果是112200,就是2级别,就分为2行数据,以此类推
SELECT ID,code FROM (WITH TAB AS (
SELECT '1' id,'112233' code FROM DUAL
UNION ALL
SELECT '2' id,'112200' code FROM DUAL
UNION ALL
SELECT '3' id,'110000' code FROM DUAL
UNION ALL
SELECT '4' id,'120000' code FROM DUAL
)
SELECT t1.id,t2.code,
CASE
WHEN T1.CODE >= T2.CODE THEN
CASE
WHEN T1.CODE = MAX(T2.CODE) OVER(ORDER BY t1.id) THEN
CASE WHEN T1.CODE=T2.CODE THEN
T1.CODE
ELSE
'0'
END
ELSE
T2.CODE
END ELSE '0' END flag
FROM TAB T1, TAB T2) WHERE flag <> '0';
SQL> SELECT ID,code FROM (WITH TAB AS (
2 SELECT '1' id,'112233' code FROM DUAL
3 UNION ALL
4 SELECT '2' id,'112200' code FROM DUAL
5 UNION ALL
6 SELECT '3' id,'110000' code FROM DUAL
7 UNION ALL
8 SELECT '4' id,'120000' code FROM DUAL
9 )
10 SELECT t1.id,t2.code,
11 CASE
12 WHEN T1.CODE >= T2.CODE THEN
13 CASE
14 WHEN T1.CODE = MAX(T2.CODE) OVER(ORDER BY t1.id) THEN
15 CASE WHEN T1.CODE=T2.CODE THEN
16 T1.CODE
17 ELSE
18 '0'
19 END
20 ELSE
21 T2.CODE
22 END ELSE '0' END flag
23 FROM TAB T1, TAB T2) WHERE flag <> '0';I CODE
- ------
1 110000
1 112200
1 112233
2 110000
2 112200
3 110000
4 120000已选择7行。