将值分组为一个并添加关联的COUNTS

时间:2013-02-07 14:16:37

标签: sql count oracle10g

再次,我为提前缺乏知识而道歉。如果我需要添加任何内容来帮助您回答我的问题,请直接询问。这就是......

我有这组数据:

PERMIT                              # OF PERMITS
Individual NPDES w/ construction    0   
Individual NPDES w/o construction   0   
Renewals (COWS)                     2   
Approvals w/ Construction           21  
Renewals (CHICKENS)                 25  
Approvals w/ Construction           1   
Approvals w/o construction          1   
Renewals (CHICKENS)                 1

我需要做的是在PERMIT列中合并类似的术语,并从许可数量中添加相关的计数。可以这样做吗?提前谢谢。

系统:Oracle 10g

4 个答案:

答案 0 :(得分:0)

在主观基础上对行进行分组会很困难,我不建议你沿着那条路走下去。相反,您应该创建一个名为“PERMIT GROUP”的第三列,以便您可以将每个许可组合在一起。一旦完成,对所需内容的查询就变得简单了。

答案 1 :(得分:0)

我认为这可以通过分析函数来完成。您需要按许可和计分来划分数据。包含分区的总计。这是基于Oracle scott.emp表的一般示例,您只能在该deptno中看到count(*)。 Dept = 10有3个雇员,20个有5个等......:

SELECT * FROM 
 (SELECT deptno, ename, job, sal,
     COUNT(*) OVER (PARTITION BY deptno) cnt
   FROM scott.emp)
  -- WHERE deptno = 10 -- optional 
 /

DEPTNO  ENAME   JOB         SAL     CNT
-------------------------------------------------------
10      CLARK   MANAGER     2450    3
10      KING    PRESIDENT   5000    3
....
20      JONES   MANAGER     2975    5
20      FORD    ANALYST     3000    5
....
30      WARD    SALESMAN    1250    6
30      TURNER  SALESMAN    1500    6

答案 2 :(得分:0)

SELECT permitgroup, SUM(nrOfpermits)
FROM (SELECT substr(permit,1,instr(permit,' ')-1) permitgroup, nrOfpermits
      FROM permits)
GROUP BY permitgroup

假设“like terms”意味着以相同的单词开头,但您可以通过修改内部SELECT语句轻松更改相似性标准。

Test Code

答案 3 :(得分:0)

我假设您有一个permits表,其中包含所有许可值的列表。

select p.permit, count(a.ACTIVITY_TASK_LIST) as NumPermits
from Permits p left outer join
     DSKMTB_ACTIVITY_TYPE.ACTIVITY_TASK_LIST a
     on p.permit = a.permit   -- assuming join is on the actual name
group by p.permit
order by 1

我认为挑战是获得0计数。您可以使用所需的所有值列表(我将其称为“驱动程序”),然后继续加入其余数据。