2011-05-31 58 views
0

我要做的计数数据库实体来说的量,我必须获得登记的数量对于出现PL SQL:查询计数型动物

ENTITY OVERALL DATE HOUR 
====== ===== ==== ==== 
ENT1 5 20100318 12:00 
ENT2 20 20100318 12:00 
ENT3 12 20100318 12:00 

CURSOR1 
SELECT distinct(rp.cod_entidad), 
YYYYYYYYY, 
to_date(to_char(SYSDATE,'YYYYMMDD'),'YYYY-MM-DD') as fecha_pago, 
to_char(sysdate,'hh-mi-ss') as hora_pago 
FROM registry rp, product pc 
where pc.nro_solicitud = rp.nro_solicitud 
and pc.resp_2= 'OK' 
and pc.resp_1= 'OK' 
+1

如果您还没有意识到:'select distinct(x),y​​ ...'并不意味着'distinct'仅适用于'x'。这不是一个功能。 'distict'修改整个结果集,以便它只包含唯一的行。 – 2011-05-31 18:03:39

回答

2

在您想要唯一的列上使用GROUP BY
为了让PL-SQL不抱怨,您必须使用一个聚合函数来为其他列选择一个值。
我挑选了MAX(),但MIN()或不存在的whatever()也可以。

SELECT 
    rp.cod_entidad, 
    count(*) as rowcount, -- number of rows per distinct rp.cod_entidad 
    MAX(to_date(to_char(SYSDATE,'YYYYMMDD'),'YYYY-MM-DD')) as fecha_pago, 
    MAX(to_char(sysdate,'hh-mi-ss')) as hora_pago 
FROM registry rp 
INNER JOIN product pc ON (pc.nro_solicitud = rp.nro_solicitud) 
WHERE pc.resp_2 = 'OK' AND pc.resp_1 = 'OK' 
GROUP BY rp.cod_entidad 

Implicit where join considered harmful
附:请不要在加入时使用那种丑陋隐含的含义,这是令人困惑和不好的做法,因为您正在无条件地将选择标准与您的where子句中的加入标准混合在一起。
自1993年以来,我们已经有了明确的连接语法,我热烈推荐它。
它会使写入正确的查询变得容易得多,它会让你的意图更清晰。

+0

我猜'YYYYYYY'是解决方案的占位符,应该用count(*)替换。 – 2011-06-01 05:41:53

2
select entity, sum(overall) 
from registry 
group by entity 
order by entity 

实体字段的值,你问题难以理解...

+0

我明白了,但我的英语不好,更多地解释这个问题,我没有列整体,我必须得到每个实体的记录数,这是问题,谢谢 – 2011-05-31 18:32:12