2 a4613934 a4613934 于 2016.04.21 16:17 提问

oracle 统计销售员销售业绩的sql(级联累加)

销售员表
id name 销售额(万) 上级id
1 A 10

2 B 10 1
3 C 10 2
4 D 10 2
5 E 10

6 F 10 5

最后实现的结果是 id为1 的 总销售额是 40万 2的销售额 是30 万 3 的销售额10万 5的销售额是10 20万 。。。。。
就是从树的叶子开始依次将子节点的值加到父节点上

3个回答

lvln2000
lvln2000   2016.04.27 16:12
已采纳

我给个思路,按你的需求,可以分别建立组织机构表(organization_tb)、销售业绩表(sale_tb)。
表结构如下:
oraganization_rb(id,name,id_upper)
sale_tb(id,sales,……)
根据组织结构表建立视图level_vw,建立3级组织机构,SQL语句如下:
SELECT id AS id_1,name AS name_1,id AS id_2,name AS name_2,id AS id_3,name AS name_3 FROM sales_tb WHERE (id_upper IS NULL)
UNION ALL SELECT b.id_1,b.name_1,a.id AS id_2,a.name AS name_2,a.id AS id_3,name AS name_3 FROM sales_tb a,(SELECT id AS id_1,name AS name_1 FROM sales_tb WHERE (id_upper IS NULL)) b WHERE a.id_upper=b.id_1
UNION ALL SELECT d.id_1,d.name_1,d.id_2,d.name_2,c.id AS id_3,c.name AS name_3 FROM sales_tb c,(SELECT b.id_1,b.name_1,a.id AS id_2,a.name AS name_2 FROM sales_tb a,(SELECT id AS id_1,name AS name_1 FROM sales_tb WHERE (id_upper IS NULL)) b WHERE a.id_upper=b.id_1) d WHERE c.id_upper=d.id_2

将sales_tb与oraganization通过id关联,用groud by对不同的组织机构级别进行聚合,可得到你想要的结果。
我认为这个简单直观,网上还有使用存储过程实现的方法,你有兴趣,可以研究一下。

huangwenkangz
huangwenkangz   2016.04.21 17:20

create table xx_sale
(
id number primary key,
name varchar2(20),
amount number,
pre_id number
)

select x.id, sum(x.amount)
from xx_sale x
connect by prior x.pre_id = x.id
group by x.id

lvln2000
lvln2000   2016.04.27 16:13

纠正一下,将sales_tb与level_vw通过id_3关联

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
EBS中的销售员SQL
销售员= 资源+员工的分配+OU职责:CRM 资源管理器1. 资源信息:  SELECT * FROM  jtf_rs_resource_extns     --资源信息  SELECT * FROM  jtf_rs_resource_extns_tl --资源信息的多语言表2. 真正的销售员的表   SELECT * FROM jtf_rs_salesreps;
Hive经典面试题——级联求和(访客访问统计报表)
在大数据面试中,Hive知识的考察大部分会问级联求和,业务场景虽然有很多种,比如说,年收入,月收入统计;访客访问次数年统计,月统计。等等。但是基本根源知识是级联求和,本文就以访客访问统计为例。 1、基本需求 根据访客的每日访问信息,进行累计访问: 输入数据: 有如下访客访问次数统计表 t_access_times 为了减轻计算复杂度,去掉了天的信息只留下了年月。 输出数据:
Oracle按日期累计求和
求各个部门在员工入职时(年份-月份)的该部门的总人数写法1:SELECT DISTINCT HIRE_YEAR_MONTH, DEPARTMENT_ID, COUNT_ FROM ( SELECT DEPARTMENT_ID, TO_CHAR(HIRE_DATE, 'yyyy/mm') HIRE_YEAR_MONTH, COUNT(*) OVER(PARTITION BY DEPARTMEN
Oracle分组统计
---------------------------------------------------Oracle分组统计---------------------------------------------------------分组统计需要使用GROUP BY来分组语法:语法:SELECT * |列名FROM 表名 {WEHRE 查询条件}   {GROUP BY 分组字段,分组字段1…}...
开窗函数 over() 累计统计用法
1、累计统计,遇到重复行时不累加sum(count(*)) over(order by count(*) desc ) 2、累计统计,遇到重复行时也累加sum(count(*)) over(order by count(*) desc rows between UNBOUNDED PRECEDING and current row ) 
【数据库SQL】数据库级联查询,同一张表,统计父级数量
不好说明,自己多琢磨琢磨就能看懂,附上表,自己看,应该能懂 select COUNT(1) from CP_NFAULTEVENT C start with C.PARENTID=1 connect by prior C.EVENTCATEID=C.PARENTID
Oracle按月份累计求和
select to_char(reg_Date,'yyyy-mm') regDate2,sum(count(*)) over(order by to_char(reg_Date,'yyyymm'), count(*)) from Ep_Info t where 1=1 and t.reg_Date>=to_date('2013-02','yyyy-mm') and t.reg_Date<=to_
oracle--创建销售表
实验目的:掌握创建表、修改表、删除表的方法 掌握创建主键约束、外键约束、用户自定义约束的方法 掌握创建查询表的方法及使用截断表的方法 理解约束在数据库中的作用 实验内容:销售表中的实体与关系列表: 创建表创建product表: 创建seller表: 创建sellerproduct表: 创建Buyer表: 创建Buyerproduct表: 创建productor表: 创建proproduc
oracle实现累加,累计百分比计算
最近做数据分析,需要用到累加功能,发现强大的oracle还真有,用over(order by field) 例子: 数据表中最后一列就是累加的效果 累加sql: select t.acc_pedal_pos,count(*) num,sum(count(*)) over(order by t.acc_pedal_pos) accu_sum from GT1117CARDATA t wh
hive系列(4)--级联求和
一、业务需求已有表: 输出表: