3,491
社区成员
发帖
与我相关
我的任务
分享
with table1 as (
select 'A' as parent_no, 'B' as no from dual union all
select 'A' as parent_no, 'C' as no from dual union all
select 'B' as parent_no, 'D' as no from dual union all
select 'C' as parent_no, 'E' as no from dual union all
select 'A' as parent_no, 'F' as no from dual union all
select 'C' as parent_no, 'G' as no from dual union all
select 'G' as parent_no, 'H' as no from dual
),
table2 as (
select 'A' AS NO,3 AS no_level from dual union all
select 'B' AS NO,NULL AS no_level from dual union all
select 'C' AS NO,2 AS no_level from dual union all
select 'D' AS NO,null AS no_level from dual union all
select 'E' AS NO,null AS no_level from dual union all
select 'F' AS NO,1 AS no_level from dual union all
select 'G' AS NO,2 AS no_level from dual union all
select 'H' AS NO,null AS no_level from dual
),
table3 as (
select 'A' as no,100 as money from dual union all
select 'B' as no,200 as money from dual union all
select 'C' as no,300 as money from dual union all
select 'D' as no,400 as money from dual union all
select 'E' as no,500 as money from dual union all
select 'F' as no,600 as money from dual union all
select 'G' as no,700 as money from dual union all
select 'H' as no,800 as money from dual
)
with table1 as
(select 'A' as parent_no, 'B' as no from dual union all
select 'A' as parent_no, 'C' as no from dual union all
select 'B' as parent_no, 'D' as no from dual union all
select 'C' as parent_no, 'E' as no from dual union all
select 'A' as parent_no, 'F' as no from dual union all
select 'C' as parent_no, 'G' as no from dual union all
select 'G' as parent_no, 'H' as no from dual union all
select 'H' as parent_no, 'I' as no from dual),
table2 as
(select 'A' AS NO, 3 AS no_level from dual union all
select 'B' AS NO, NULL AS no_level from dual union all
select 'C' AS NO, 2 AS no_level from dual union all
select 'D' AS NO, null AS no_level from dual union all
select 'E' AS NO, null AS no_level from dual union all
select 'F' AS NO, 1 AS no_level from dual union all
select 'G' AS NO, 2 AS no_level from dual union all
select 'H' AS NO, null AS no_level from dual UNION ALL
select 'I' AS NO, 1 AS no_level from dual),
table3 as
(select 'A' as no, 100 as money from dual union all
select 'B' as no, 200 as money from dual union all
select 'C' as no, 300 as money from dual union all
select 'D' as no, 400 as money from dual union all
select 'E' as no, 500 as money from dual union all
select 'F' as no, 600 as money from dual union all
select 'G' as no, 700 as money from dual union all
select 'H' as no, 800 as money from dual UNION ALL
select 'I' as no, 900 as money from dual)
,
table4 as
(
select CONNECT_BY_ROOT(a.parent_no) root, a.no, level lv
from (select b.parent_no,b.no from table1 b where b.parent_no in (select c.no from table2 c where c.no=b.parent_no and c.no_level is not null)) a
connect by prior a.no = a.parent_no
union all
select a.no root,a.no,1 as lv from table2 a
where a.no_level is not null and a.no not in (select parent_no from table1 )
)
select t4.root, t4.no, t3.money * 0.05 as money
from table4 t4, table1 t1, table2 t2, table3 t3
where t4.no = t1.no
and t1.parent_no = t2.no
and t1.no = t3.no
and (lv = 1 or (lv > 1 and not t2.no_level is null))
with table1 as
(select 'A' as parent_no, 'B' as no from dual union all
select 'A' as parent_no, 'C' as no from dual union all
select 'B' as parent_no, 'D' as no from dual union all
select 'C' as parent_no, 'E' as no from dual union all
select 'A' as parent_no, 'F' as no from dual union all
select 'C' as parent_no, 'G' as no from dual union all
select 'G' as parent_no, 'H' as no from dual union all
select 'H' as parent_no, 'I' as no from dual),
table2 as
(select 'A' AS NO, 3 AS no_level from dual union all
select 'B' AS NO, NULL AS no_level from dual union all
select 'C' AS NO, 2 AS no_level from dual union all
select 'D' AS NO, null AS no_level from dual union all
select 'E' AS NO, null AS no_level from dual union all
select 'F' AS NO, 1 AS no_level from dual union all
select 'G' AS NO, 2 AS no_level from dual union all
select 'H' AS NO, null AS no_level from dual UNION ALL
select 'I' AS NO, 1 AS no_level from dual),
table3 as
(select 'A' as no, 100 as money from dual union all
select 'B' as no, 200 as money from dual union all
select 'C' as no, 300 as money from dual union all
select 'D' as no, 400 as money from dual union all
select 'E' as no, 500 as money from dual union all
select 'F' as no, 600 as money from dual union all
select 'G' as no, 700 as money from dual union all
select 'H' as no, 800 as money from dual UNION ALL
select 'I' as no, 900 as money from dual)
[/quote]
如果I在H下面,那么要提取I的话,H不应该要有等级的吗?[/quote]
要不要提取奖金,和下级会员的等级没关系,只要能提这么多层就可以。提G这个用户的时候,只提了G这个点,提H这个用户的时候,如果下级用户I有等级,那也只能提H用户这个点,如果还能提下一层,那就是I这个点。with table1 as
(select 'A' as parent_no, 'B' as no from dual union all
select 'A' as parent_no, 'C' as no from dual union all
select 'B' as parent_no, 'D' as no from dual union all
select 'C' as parent_no, 'E' as no from dual union all
select 'A' as parent_no, 'F' as no from dual union all
select 'C' as parent_no, 'G' as no from dual union all
select 'G' as parent_no, 'H' as no from dual union all
select 'H' as parent_no, 'I' as no from dual),
table2 as
(select 'A' AS NO, 3 AS no_level from dual union all
select 'B' AS NO, NULL AS no_level from dual union all
select 'C' AS NO, 2 AS no_level from dual union all
select 'D' AS NO, null AS no_level from dual union all
select 'E' AS NO, null AS no_level from dual union all
select 'F' AS NO, 1 AS no_level from dual union all
select 'G' AS NO, 2 AS no_level from dual union all
select 'H' AS NO, null AS no_level from dual UNION ALL
select 'I' AS NO, 1 AS no_level from dual),
table3 as
(select 'A' as no, 100 as money from dual union all
select 'B' as no, 200 as money from dual union all
select 'C' as no, 300 as money from dual union all
select 'D' as no, 400 as money from dual union all
select 'E' as no, 500 as money from dual union all
select 'F' as no, 600 as money from dual union all
select 'G' as no, 700 as money from dual union all
select 'H' as no, 800 as money from dual UNION ALL
select 'I' as no, 900 as money from dual)
[/quote]
如果I在H下面,那么要提取I的话,H不应该要有等级的吗?
with table1 as
(select 'A' as parent_no, 'B' as no from dual union all
select 'A' as parent_no, 'C' as no from dual union all
select 'B' as parent_no, 'D' as no from dual union all
select 'C' as parent_no, 'E' as no from dual union all
select 'A' as parent_no, 'F' as no from dual union all
select 'C' as parent_no, 'G' as no from dual union all
select 'G' as parent_no, 'H' as no from dual union all
select 'H' as parent_no, 'I' as no from dual),
table2 as
(select 'A' AS NO, 3 AS no_level from dual union all
select 'B' AS NO, NULL AS no_level from dual union all
select 'C' AS NO, 2 AS no_level from dual union all
select 'D' AS NO, null AS no_level from dual union all
select 'E' AS NO, null AS no_level from dual union all
select 'F' AS NO, 1 AS no_level from dual union all
select 'G' AS NO, 2 AS no_level from dual union all
select 'H' AS NO, null AS no_level from dual UNION ALL
select 'I' AS NO, 1 AS no_level from dual),
table3 as
(select 'A' as no, 100 as money from dual union all
select 'B' as no, 200 as money from dual union all
select 'C' as no, 300 as money from dual union all
select 'D' as no, 400 as money from dual union all
select 'E' as no, 500 as money from dual union all
select 'F' as no, 600 as money from dual union all
select 'G' as no, 700 as money from dual union all
select 'H' as no, 800 as money from dual UNION ALL
select 'I' as no, 900 as money from dual)
,
table4 as
(
select b.root,b.no,b.lv from
(select CONNECT_BY_ROOT(a.parent_no) root, a.no, level lv
from table1 a
connect by prior a.no = a.parent_no ) b
where b.root in (select c.no from table2 c where c.no=b.root and c.no_level is not null)
)
select distinct t4.root, t4.no, t3.money * 0.05 as money
from table4 t4, table1 t1, table2 t2, table3 t3
where t4.no = t1.no
and t1.no = t3.no
and ((t1.parent_no = t2.no and t2.no_level is not null) or (t4.no=t2.no and t2.no_level is not null))
with table1 as
(select 'A' as parent_no, 'B' as no from dual union all
select 'A' as parent_no, 'C' as no from dual union all
select 'B' as parent_no, 'D' as no from dual union all
select 'C' as parent_no, 'E' as no from dual union all
select 'A' as parent_no, 'F' as no from dual union all
select 'C' as parent_no, 'G' as no from dual union all
select 'G' as parent_no, 'H' as no from dual union all
select 'H' as parent_no, 'I' as no from dual),
table2 as
(select 'A' AS NO, 3 AS no_level from dual union all
select 'B' AS NO, NULL AS no_level from dual union all
select 'C' AS NO, 2 AS no_level from dual union all
select 'D' AS NO, null AS no_level from dual union all
select 'E' AS NO, null AS no_level from dual union all
select 'F' AS NO, 1 AS no_level from dual union all
select 'G' AS NO, 2 AS no_level from dual union all
select 'H' AS NO, null AS no_level from dual UNION ALL
select 'I' AS NO, 1 AS no_level from dual),
table3 as
(select 'A' as no, 100 as money from dual union all
select 'B' as no, 200 as money from dual union all
select 'C' as no, 300 as money from dual union all
select 'D' as no, 400 as money from dual union all
select 'E' as no, 500 as money from dual union all
select 'F' as no, 600 as money from dual union all
select 'G' as no, 700 as money from dual union all
select 'H' as no, 800 as money from dual UNION ALL
select 'I' as no, 900 as money from dual)
with table1 as
(select 'A' as parent_no, 'B' as no from dual union all
select 'A' as parent_no, 'C' as no from dual union all
select 'B' as parent_no, 'D' as no from dual union all
select 'C' as parent_no, 'E' as no from dual union all
select 'A' as parent_no, 'F' as no from dual union all
select 'C' as parent_no, 'G' as no from dual union all
select 'G' as parent_no, 'H' as no from dual),
table2 as
(select 'A' AS NO, 3 AS no_level from dual union all
select 'B' AS NO, NULL AS no_level from dual union all
select 'C' AS NO, 2 AS no_level from dual union all
select 'D' AS NO, null AS no_level from dual union all
select 'E' AS NO, null AS no_level from dual union all
select 'F' AS NO, 1 AS no_level from dual union all
select 'G' AS NO, 2 AS no_level from dual union all
select 'H' AS NO, null AS no_level from dual),
table3 as
(select 'A' as no, 100 as money from dual union all
select 'B' as no, 200 as money from dual union all
select 'C' as no, 300 as money from dual union all
select 'D' as no, 400 as money from dual union all
select 'E' as no, 500 as money from dual union all
select 'F' as no, 600 as money from dual union all
select 'G' as no, 700 as money from dual union all
select 'H' as no, 800 as money from dual),
table4 as
(
select CONNECT_BY_ROOT(parent_no) root, no, level lv
from table1 a
connect by prior no = a.parent_no
)
select t4.root, t4.no, t3.money * 0.05
from table4 t4, table1 t1, table2 t2, table3 t3
where t4.no = t1.no
and t1.parent_no = t2.no
and t1.no = t3.no
and (lv = 1 or (lv > 1 and not t2.no_level is null))
and t4.root='A'