2011-05-31 33 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