问题描述
|
我必须对数据库中实体的数量进行计数,我必须获取出现的实体的注册表数量
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。
为了不让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
隐含在认为有害的地方
附言请不要在联接的地方使用丑陋的隐式,因为这会造成混淆和不好的习惯,因为您会毫无理由地在where
子句中混合选择条件和联接条件。
自1993年以来,我们就有了显式的联接语法,我热烈推荐它。
这将使编写正确的查询变得容易得多,并使您的意图更加清晰。
, select entity,sum(overall)
from registry
group by entity
order by entity
您的问题很难理解...