我有一个表是员工信息表
姓名 年龄 工资 部门
gao 2 100 a
hui 8 200 a
rong 11 300 b
liu 14 500 b
jin 16 700 b
feng 20 800 b
aa 3 200 b
bb 6 900 a
还有一个表是定义的一些规则
起始值 终止值 定义别名 对规则区分
1 7 inf p
8 13 chd p
14 20 man p
100 200 low s
300 600 mid s
700 1000 hig s
第二个表的第一行 就P表示对年龄列定义,1-7岁统一化为inf(婴儿)
第4行s表示对工资列定义 100-200为low(低工资)
现在我的目的是第一个表通过第二个表的定义,查出
部门 P S 人数
a inf low 1
这样格式。然后插入另外的表,可以写过程。
------解决方案--------------------
with test as(
select 'gao' 姓名,2 年龄,100 工资,'a' 部门 from dual union all
select 'hui' 姓名,8 年龄,200 工资,'a' 部门 from dual union all
select 'rong' 姓名,11 年龄,300 工资,'b' 部门 from dual union all
select 'liu' 姓名,14 年龄,500 工资,'b' 部门 from dual union all
select 'jin' 姓名,16 年龄,700 工资,'b' 部门 from dual union all
select 'feng' 姓名,20 年龄,800 工资,'b' 部门 from dual union all
select 'aa' 姓名,3 年龄,200 工资,'b' 部门 from dual union all
select 'bb' 姓名,6 年龄,900 工资,'a' 部门 from dual ),
rules as(
select 1 起始值,7 终止值,'inf' 定义别名,'p' 规则区分 from dual union all
select 8 起始值,13 终止值,'chd' 定义别名,'p' 规则区分 from dual union all
select 14 起始值,20 终止值,'man' 定义别名,'p' 规则区分 from dual union all
select 100 起始值,200 终止值,'low' 定义别名,'s' 规则区分 from dual union all
select 300 起始值,600 终止值,'mid' 定义别名,'s' 规则区分 from dual union all
select 700 起始值,1000 终止值,'hig' 定义别名,'s' 规则区分 from dual)
select 部门, p, s, count(1) 人数
from (select 姓名,
(select 定义别名
from rules
where 规则区分 = 'p'
and test.年龄 between 起始值 and 终止值) p,
(select 定义别名
from rules
where 规则区分 = 's'
and test.工资 between 起始值 and 终止值) s,
部门
from test)
group by 部门, p, s
order by 部门
[code=sq]
序号 部门 p s 人数
1 a chd low 1
2 a inf hig 1
3 a inf low 1
4 b chd mid 1
5 b inf low 1
6 b man hig 2
7 b man mid 1[/code]
不知道是不是这个意思,你的人数是按照[部门,s,p]分组统计出来的吧。。