Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

obtener el total de registros obtenidos en una consulta

Estas en el tema de obtener el total de registros obtenidos en una consulta en el foro de SQL Server en Foros del Web. Hola, quiero obtener el total de registros obtenidos en una consulta, es decir algo como un count, si es posible en la misma consulta del ...
  #1 (permalink)  
Antiguo 17/01/2011, 16:01
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
obtener el total de registros obtenidos en una consulta

Hola, quiero obtener el total de registros obtenidos en una consulta, es decir algo como un count, si es posible en la misma consulta del select, mi problema es que quiero limitar la consulta para que solo me muestre un registro, es decir un TOP 1, en la siguiente consulta me selecciona todos los registros y en el SELECT @@rowcount AS 'RowsReturned' me devuelve el total de registros retornados, pero si hago el TOP 1, este rowCount me devolveria solo "1".
Alguien conoce una forma eficaz para hacer esto¡?
Código SQL:
Ver original
  1. @fecha datetime,
  2. @linea nvarchar(5),
  3. @hora nvarchar(15) AS
  4. BEGIN
  5.     SET Nocount ON
  6.  
  7.     SELECT  h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea
  8.     FROM optimas AS o
  9.     INNER JOIN pesos AS p ON o.codigo = p.codoptima
  10.     INNER JOIN htargets AS h ON o.codigo = h.codoptima
  11.     WHERE o.linea = @linea
  12.     AND p.fecha >= @fecha AND h.fecha >= @fecha
  13.     AND p.hora = @hora AND h.hora = @hora
  14.     ORDER BY fecha
  15. SELECT @@rowcount AS 'RowsReturned'
  #2 (permalink)  
Antiguo 17/01/2011, 16:47
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: obtener el total de registros obtenidos en una consulta

GROUP BY no te sirve?
Puedes guardar el valor de @@rowcount en una variable antes de hacer TOP 1.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 18/01/2011, 09:17
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener el total de registros obtenidos en una consulta

Hola, y como guardo el valor de una variable? no entendi esa parte. Ademas como voy a obtebner el valor de rowcount si este lo que hace es darte el numero total de files que fueron retornada.
  #4 (permalink)  
Antiguo 18/01/2011, 09:35
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: obtener el total de registros obtenidos en una consulta

Esta es la idea:
Código SQL:
Ver original
  1. DECLARE @reg INT
  2.  
  3. SELECT h.hora AS hora1,h.marca,h.target, h.fecha AS hfecha,p.hora,p.peso,p.fecha,o.linea
  4. FROM optimas AS o
  5. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  6. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  7. WHERE o.linea = @linea
  8. AND p.fecha >= @fecha AND h.fecha >= @fecha
  9. AND p.hora = @hora AND h.hora = @hora
  10. ORDER BY fecha
  11.  
  12. SET @reg = @@rowcount
  13.  
  14. SELECT top 1 @reg AS 'RowsReturned'
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 18/01/2011, 09:42
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener el total de registros obtenidos en una consulta

Lo he probado pero no furula asi, sigo obteniendo el mismo resultado, os dejo una captura de pantalla de lo devuelto y a continuacion el script como ha quedado: http://ompldr.org/vNzFsYw
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[monitor2]
  2. @fecha datetime,
  3. @linea nvarchar(5),
  4. @hora nvarchar(15) AS
  5. DECLARE @reg INT
  6. BEGIN
  7.     SET Nocount ON
  8.  
  9.     SELECT  h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea
  10.     FROM optimas AS o
  11.     INNER JOIN pesos AS p ON o.codigo = p.codoptima
  12.     INNER JOIN htargets AS h ON o.codigo = h.codoptima
  13.     WHERE o.linea = @linea
  14.     AND p.fecha >= @fecha AND h.fecha >= @fecha
  15.     AND p.hora = @hora AND h.hora = @hora
  16.     ORDER BY fecha
  17.    
  18.  
  19. SET @reg = @@rowcount
  20.  
  21. SELECT top 1 @reg AS 'RowsReturned'
  22. --SELECT @@rowcount AS 'RowsReturned'
  23.     --SELECT TOP 1 *,(SELECT count(1)total FROM #temporal1) as totality from #temporal1
  24.  
  25. END
  #6 (permalink)  
Antiguo 18/01/2011, 09:46
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: obtener el total de registros obtenidos en una consulta

Y cual es el resultado que tu esperas? Tener el numero 9990 repetido 9990 veces?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 18/01/2011, 09:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener el total de registros obtenidos en una consulta

Espero obtener un resultado como en la siguiente imagen: http://ompldr.org/vNzFsZg
Es decir solo quiero obtener un registro, una fila, hacer un top 1 pero que me de tambien el numero total de la seleccion. No quiero guardar los datos en una tabla temporal y despues hacerle un count a esta tabla por que quiero hacer un proceso mas rapido. Si se fija en la siguiente imagen: http://ompldr.org/vNzFsYw me manda todos los datos y aparte el total pero yo quoero solo un dato, puesto que los reflejare en una pantalla y solo necesito uno.
  #8 (permalink)  
Antiguo 18/01/2011, 10:06
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: obtener el total de registros obtenidos en una consulta

Código SQL:
Ver original
  1. DECLARE @reg INT
  2.  
  3. SELECT h.hora AS hora1,h.marca,h.target, h.fecha AS hfecha,p.hora,p.peso,p.fecha,o.linea
  4. FROM optimas AS o
  5. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  6. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  7. WHERE o.linea = @linea
  8. AND p.fecha >= @fecha AND h.fecha >= @fecha
  9. AND p.hora = @hora AND h.hora = @hora
  10. ORDER BY fecha
  11.  
  12. SET @reg = @@rowcount
  13.  
  14. SELECT top 1 h.hora AS hora1,<aqui tus campos>,@reg AS 'RowsReturned'
  15. FROM optimas AS o
  16. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  17. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  18. WHERE o.linea = @linea
  19. AND p.fecha >= @fecha AND h.fecha >= @fecha
  20. AND p.hora = @hora AND h.hora = @hora
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #9 (permalink)  
Antiguo 18/01/2011, 10:48
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener el total de registros obtenidos en una consulta

Con eso en efecto me da el resultado que espero, pero... Tambien me arroja todos los datos que no necesito en la primera respuesta y en la segunda ya me da lo que necesito realmente, no quiero lo primero puesto que esto se reflejaria en un programa, ademas el proceso es mucho mas lento al hacer 2 selects. Existe una forma de poder ocultar la primera respuesta?
Dejo captura:
http://ompldr.org/vNzFtbA and source:
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[monitor2]
  2. @fecha datetime,
  3. @linea nvarchar(5),
  4. @hora nvarchar(15) AS
  5. DECLARE @reg INT
  6. BEGIN
  7.     SET Nocount ON
  8.  
  9.     SELECT  h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea
  10.     FROM optimas AS o
  11.     INNER JOIN pesos AS p ON o.codigo = p.codoptima
  12.     INNER JOIN htargets AS h ON o.codigo = h.codoptima
  13.     WHERE o.linea = @linea
  14.     AND p.fecha >= @fecha AND h.fecha >= @fecha
  15.     AND p.hora = @hora AND h.hora = @hora
  16.     ORDER BY fecha
  17.    
  18.  
  19. SET @reg = @@rowcount
  20. SELECT top 1 h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea, @reg AS 'RowsReturned'
  21. FROM optimas AS o
  22. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  23. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  24. WHERE o.linea = @linea
  25. AND p.fecha >= @fecha AND h.fecha >= @fecha
  26. AND p.hora = @hora AND h.hora = @hora
  27. --SELECT top 1 @reg AS 'RowsReturned'
  28. --SELECT @@rowcount AS 'RowsReturned'
  29.     --SELECT TOP 1 *,(SELECT count(1)total FROM #temporal1) as totality from #temporal1
  30.  
  31. END
  #10 (permalink)  
Antiguo 18/01/2011, 11:42
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: obtener el total de registros obtenidos en una consulta

Asi que tal?
Código SQL:
Ver original
  1. DECLARE @reg INT
  2.  
  3. SELECT @reg = COUNT(1)
  4. FROM optimas AS o
  5. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  6. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  7. WHERE o.linea = @linea
  8. AND p.fecha >= @fecha AND h.fecha >= @fecha
  9. AND p.hora = @hora AND h.hora = @hora
  10. ORDER BY fecha
  11.  
  12. SELECT top 1 h.hora AS hora1,<aqui tus campos>,@reg AS 'RowsReturned'
  13. FROM optimas AS o
  14. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  15. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  16. WHERE o.linea = @linea
  17. AND p.fecha >= @fecha AND h.fecha >= @fecha
  18. AND p.hora = @hora AND h.hora = @hora
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #11 (permalink)  
Antiguo 18/01/2011, 11:58
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener el total de registros obtenidos en una consulta

Me da error, http://ompldr.org/vNzFvYw
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[monitor2]
  2. @fecha datetime,
  3. @linea nvarchar(5),
  4. @hora nvarchar(15) AS
  5. DECLARE @reg INT
  6. BEGIN
  7.     SET Nocount ON
  8.  
  9.     SELECT @reg = COUNT(1),h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea
  10.     FROM optimas AS o
  11.     INNER JOIN pesos AS p ON o.codigo = p.codoptima
  12.     INNER JOIN htargets AS h ON o.codigo = h.codoptima
  13.     WHERE o.linea = @linea
  14.     AND p.fecha >= @fecha AND h.fecha >= @fecha
  15.     AND p.hora = @hora AND h.hora = @hora
  16.     ORDER BY fecha
  17.    
  18.  
  19. SET @reg = @@rowcount
  20. SELECT top 1 h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea, @reg AS 'RowsReturned'
  21. FROM optimas AS o
  22. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  23. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  24. WHERE o.linea = @linea
  25. AND p.fecha >= @fecha AND h.fecha >= @fecha
  26. AND p.hora = @hora AND h.hora = @hora
  27. --SELECT top 1 @reg AS 'RowsReturned'
  28. --SELECT @@rowcount AS 'RowsReturned'
  29.     --SELECT TOP 1 *,(SELECT count(1)total FROM #temporal1) as totality from #temporal1
  30.  
  31. END
  #12 (permalink)  
Antiguo 18/01/2011, 14:23
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: obtener el total de registros obtenidos en una consulta

Yo puse asi:
Código SQL:
Ver original
  1. SELECT @reg = COUNT(1)
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #13 (permalink)  
Antiguo 18/01/2011, 14:39
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener el total de registros obtenidos en una consulta

Hola doc, pero como dije antes la funcion rowcount solo retornaria uno por que estas haciendo un count(1) y eso es lo que retornara tal y como tu lo dejaste lo he puestop y en efecto solo me da 1:
http://ompldr.org/vNzFyMg
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[monitor2]
  2. @fecha datetime,
  3. @linea nvarchar(5),
  4. @hora nvarchar(15) AS
  5. DECLARE @reg INT
  6. BEGIN
  7.     SET Nocount ON
  8.  
  9.     SELECT @reg = COUNT(1)
  10.     FROM optimas AS o
  11.     INNER JOIN pesos AS p ON o.codigo = p.codoptima
  12.     INNER JOIN htargets AS h ON o.codigo = h.codoptima
  13.     WHERE o.linea = @linea
  14.     AND p.fecha >= @fecha AND h.fecha >= @fecha
  15.     AND p.hora = @hora AND h.hora = @hora
  16.     --order by fecha
  17.    
  18.  
  19. SET @reg = @@rowcount
  20. SELECT top 1 h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea, @reg AS 'RowsReturned'
  21. FROM optimas AS o
  22. INNER JOIN pesos AS p ON o.codigo = p.codoptima
  23. INNER JOIN htargets AS h ON o.codigo = h.codoptima
  24. WHERE o.linea = @linea
  25. AND p.fecha >= @fecha AND h.fecha >= @fecha
  26. AND p.hora = @hora AND h.hora = @hora
  27. --SELECT top 1 @reg AS 'RowsReturned'
  28. --SELECT @@rowcount AS 'RowsReturned'
  29.     --SELECT TOP 1 *,(SELECT count(1)total FROM #temporal1) as totality from #temporal1
  30.  
  31. END
  #14 (permalink)  
Antiguo 18/01/2011, 14:53
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: obtener el total de registros obtenidos en una consulta

A ver, volvamos al post N° 10, que puse yo?
Tienes que estar mas atento.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #15 (permalink)  
Antiguo 18/01/2011, 16:05
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener el total de registros obtenidos en una consulta

Hola flaviovich, MUCHAS GRACIAS!! me ha funcionado. http://ompldr.org/vNzFzdA
de verdad agradezco tu desinteresada ayuda y el apoyo!
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[monitor3]
  2. @fecha datetime,
  3. @linea nvarchar(5),
  4. @hora nvarchar(15) AS
  5. --declare @reg int
  6. BEGIN
  7.     SET Nocount ON
  8.  
  9.      
  10.       DECLARE @reg INT
  11.    
  12.          
  13.       SELECT @reg = COUNT(1)
  14.          FROM optimas AS o
  15.        INNER JOIN pesos AS p ON o.codigo = p.codoptima
  16.          INNER JOIN htargets AS h ON o.codigo = h.codoptima
  17.          WHERE o.linea = @linea
  18.          AND p.fecha >= @fecha AND h.fecha >= @fecha
  19.          AND p.hora = @hora AND h.hora = @hora
  20.    
  21.        SELECT top 1 h.hora AS hora1,h.marca,h.target,h.fecha AS  hfecha,p.hora,p.peso,p.fecha,o.linea,@reg AS 'RowsReturned'
  22.         FROM optimas AS o
  23.        INNER JOIN pesos AS p ON o.codigo = p.codoptima
  24.         INNER JOIN htargets AS h ON o.codigo = h.codoptima
  25.         WHERE o.linea = @linea
  26.         AND p.fecha >= @fecha AND h.fecha >= @fecha
  27.         AND p.hora = @hora AND h.hora = @hora
  28. END

Etiquetas: registros, totales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:50.