这个sql语句怎么写?
有这两个表
A
sid byamount(金额) yyyymm(月份)
LSA08001 3050.00 200706
LSA08001 520 200707
LSA08001 420 200708
LSB05001 230 200706
LSB05001 450 200707
LSB05001 620 200708
LSC05001 720 200706
LSC05001 1500 200707
LSC05001 600 200708
LSD08001 320 200705
............
sid parentid(上线)
LSC05001 LSC05001
LSB05001 LSC05001
LSA08001 LSB05001
LSD08001 LSA08001
............
上线包含下线,现在要统计上线LS05001三个月的业绩该怎么统计,因为下线有可能是别的上线,这个是无穷尽的
[解决办法]
能否再说清楚点??
[解决办法]
select sum(t1.byamount)
from t1,(select t2.sid from t2 start with t2.sid= 'LS05001 '
connect by prior t2.sid=t2.parentid)t3
where t1.sid = t3.sid
and to_date(yyyymm|| '10 ', 'YYYYMMDD ') between ? and ?
两个问号代表时间段
[解决办法]
manyroads(一个巴掌照样拍响)的SQL很好,不过有点小问题,从测试数据中发现:sid 和 parentid 有可能相等, 如:
sid parentid(上线)
LSC05001 LSC05001
如果这样,必须把这种数据特殊处理。
可以参考下面的SQL语句:
select sum(t1.byamount)
from t1
where 月份条件
and ( sid = 'LSC05001 ' or
sid in
(select t3.sid from (select * from t2 where sid <> parentid) t3
start with t3.sid= 'LSC05001 ' connect by prior t3.sid=t3.parentid ));
说明一下:
1。关于求三个月的业绩,这个条件根据需求你可以自己写。
2。sid包括自己本身和所有的下线,所以用OR的关系。
3。用in效率不高,但是比较清晰,你可以适当改写成类似manyroads(一个巴掌照样拍响)的SQL。