count(*) en un group

08/11/2007 - 19:28 por rubenc | Informe spam
Hola
alguien pudiera decirme como obtener el numero total de registro de un selec
como este:

SELECT c1, year(f1), month(f1)
FROM tabla
GROUP BY c1, year(f1), month(f1)
HAVING count(*) > 0
and year(f1) = 2005 and month(f1)
order by c1

esta sentencia me agrupa los registros repetidos...

de hecho en la tabla tengo como 5000 registros y me lo agrupa como en 538
(porque se repite el campo c1 y la fecha)

si le digo select count(*) me da el total que agrupo por cada registro...
yo quiero que me diga el numero total de registros... en este ejemplo seria
538

tendria que leer registro por registro incrementando un contador hasta
llegar al fin del select... y eso es tardado

Muchas Gracias

Ruben Carreon

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
08/11/2007 - 20:02 | Informe spam
Hola Ruben,

On 8 nov, 19:28, rubenc wrote:
Mostrar la cita
Si quieres solo los repetidos tienes que usar
HAVING count(*) > 1.
El HAVING count(*) > 0 no hace nada.


Mostrar la cita
select count(*)
from ( <pon aquí tu select completo> ) A

Saludos,
Carlos
#2 rubenc
08/11/2007 - 20:49 | Informe spam
Gracias por tu respuesta Carlos

no es ese el problema... con HAVING count(*) > 0 m regresa agrupados aunque
no esten repetidos, ejemplo

c1 count(*)
110 200
120 1
130 10
140 100
150 1

si le pongo HAVING count(*) > 1 me da:
c1 count(*)
110 200
130 10
140 100

pero ese no es el problema, el problema es que quiero saber cuantos
registros en total me da este select -group
en el ejemplo uno me dria 5 registros, en el dos me diria 3 registros...
eso es lo que no puedo logar que me de...

saludos


Muchas Gracias

Ruben Carreon


"Carlos M. Calvelo" wrote:

Mostrar la cita
#3 Alejandro Mesa
08/11/2007 - 20:53 | Informe spam
rubenc,

Si estas usando SQL Server 2005, tambien puedes usar una funcion de
agrupacion en conjunto con la nueva clausula OVER.

use northwind
go

SELECT
customerid,
year(orderdate) AS y,
month(orderdate) AS m,
COUNT(*) OVER() AS row_cnt
FROM
dbo.Orders
GROUP BY
customerid,
year(orderdate),
month(orderdate)
HAVING
count(*) > 0
and year(orderdate) = 1997 and month(orderdate)=8
order BY
customerid
GO


AMB


"rubenc" wrote:

Mostrar la cita
#4 Carlos M. Calvelo
08/11/2007 - 20:57 | Informe spam
On 8 nov, 20:49, rubenc wrote:
Mostrar la cita
Pues no pongas el HAVING COUNT(*) > 0
Con el GROUP BY ... ya basta.


Mostrar la cita
Ya te lo he dicho :)

Aquí está:
Mostrar la cita
Saludos,
Carlos
#5 rubenc
09/11/2007 - 02:29 | Informe spam
Gracias Carlos y Alejandro por contestar...

Carlos, si le quito el el HAVING COUNT(*) > 0
no me agrupa los duplicados y necesito que me agrupe los duplicados

Alejandro uso SQL 2000 y 2005, asi que si la causula OVEr solo funciona en
el 2k5 no me sirve...

Muchas Gracias

Ruben Carreon


"Alejandro Mesa" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida