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

Ayuda con consulta SQL

Estas en el tema de Ayuda con consulta SQL en el foro de SQL Server en Foros del Web. Muy buenas a todos/as Os escribo para ver si me podeis ayudar con una consulta: Necesito sacar de una tabla, el tipo y el usuario ...
  #1 (permalink)  
Antiguo 13/01/2011, 02:45
 
Fecha de Ingreso: mayo-2007
Mensajes: 35
Antigüedad: 16 años, 11 meses
Puntos: 0
Ayuda con consulta SQL

Muy buenas a todos/as

Os escribo para ver si me podeis ayudar con una consulta: Necesito sacar de una tabla, el tipo y el usuario de forma que me devuelva cuantos registros hay de un tipo determinado por usuario y luego el total de registros. Lo que tengo hasta ahora es:

SELECT DISTINCT Tipo, COUNT(Usuario) AS TOTAL, Usuario
FROM Incidencias
WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')
GROUP BY Usuario, Tipo

Esto me muestra lo siguiente:

TIPO TOTALUSUARIO

ANIMALES 2 Javi
COMERCIO 1 Ana
COMERCIO 1 Juan
SONOMETRIA 1 Ana
SONOMETRIA 1 Javi
SONOMETRIA 1 Juan
SEGURIDAD 2 Ana

Ahora lo que quiero es que me sume todos los totales y me devuelva, en este caso: TOTAL: 9 (2+1+1+1+1+1+2)

He probado a hacer:

SELECT DISTINCT Tipo, SUM(COUNT(Usuario)) AS TOTAL, Usuario
FROM Incidencias
WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')
GROUP BY Usuario, Tipo

pero da error. Alguna idea de como sacarlo?? En SQL estoy bastante oxidado.

Un saludo y muchas gracias.
  #2 (permalink)  
Antiguo 13/01/2011, 03:44
 
Fecha de Ingreso: diciembre-2009
Mensajes: 51
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Ayuda con consulta SQL

Tendras que hacer un select aparte, donde solo incluyas la suma.

Select sum(usuario) from Incidencias
WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')
GROUP BY Usuario

Al crear el grupo no puedes pedir datos, que se incluyan dentro del grupo.
__________________
Institutosfp.com
  #3 (permalink)  
Antiguo 13/01/2011, 05:58
 
Fecha de Ingreso: mayo-2007
Mensajes: 35
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Ayuda con consulta SQL

Gracias por la respuesta tribano!

Lo pruebo y comento.

Un saludo y gracias.

EDITO: Le he hecho un UNION a la consulta anterior con la idea que me diste del sum(usuario) pero me da error y me dice que no se puede sumar un varchar ("El tipo de datos nvarchar del operando no es valido para el operador sum"). La consulta que hago es la siguiente:

SELECT DISTINCT Tipo, COUNT(Usuario) AS TOTAL, Usuario
FROM Incidencias
WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')
GROUP BY Usuario, Tipo
UNION
SELECT SUM(Usuario) FROM Incidencias
WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')

Última edición por CrepuX; 13/01/2011 a las 06:27
  #4 (permalink)  
Antiguo 13/01/2011, 09:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Ayuda con consulta SQL

Buenos días CrepuX:

Hay varios detalles que hay que corregir en lo que estás intentando hacer:

Primero en la consulta, al poner esto SUM(Usuario) lo que estaría intentando hacer es sumar Javi + Ana + Juan. Al no ser NUMEROS entonces ocurre el error que mencionas.

Lo que tú necesitas hacer es CONTAR los registros SIN AGRUPAR, es decir simplemente tienes que hacer esto:

Código MySQL:
Ver original
  1. Select count(*) from Incidencias
  2. WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')

NOTA: No mencionas qué manejador de base de datos estás utilizando, pero la mayoría utiliza el formato de fecha ANSI (yyyymmdd), por lo que sería conveniente que trataras de utilizar esto, pero si tu consulta funciona pues adelante.

Ahora bien, para poder hacer un UNION las dos consultas que quieras juntar DEBEN TENER EL MISMO NÚMERO DE CAMPOS y DEL MISMO TIPO. La primer consulta que tienes para obtener el desglose te está regresando tres columnas:

Código:
Tipo|Total|Usuario

Por lo tanto la consulta para obtener el total también de debe regresar tres campos. la consulta quedaría más o menos así

Código SQL:
Ver original
  1. SELECT DISTINCT Tipo, COUNT(Usuario) AS TOTAL, Usuario
  2. FROM Incidencias
  3. WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')
  4. GROUP BY Usuario, Tipo
  5. UNION
  6. SELECT 'Total:' AS Tipo, COUNT(*) AS TOTAL, NULL AS Usuario
  7. FROM Incidencias
  8. WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')

Esta consulta te regresaría lo siguiente:

Código:
Tipo|TOTAL|Usuario
------------------------------
ANIMALES|2|Javi
COMERCIO|1|Ana
COMERCIO|1|Juan
SONOMETRIA|1|Ana
SONOMETRIA|1|Javi
SONOMETRIA|1|Juan
SEGURIDAD|2|Ana
TOTAL:|9|null
Saludos
Leo.
  #5 (permalink)  
Antiguo 13/01/2011, 09:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Ayuda con consulta SQL

Prueba con algo asi:

SELECT DISTINCT Tipo, COUNT(Usuario) AS TOTAL, Usuario, (select sum(usuario) from incidencias WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011') )
FROM Incidencias
WHERE (Fecha BETWEEN '27/12/2010' AND '05/01/2011')
GROUP BY Usuario, Tipo


Saludos!
  #6 (permalink)  
Antiguo 13/01/2011, 09:42
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Ayuda con consulta SQL

Libras

Recuerda que en el manejo de fechas, SIEMPRE debes utilizar formatos ANSI (yyyy-mm-dd) y preferentemente compararlas con >= y <=

Código SQL:
Ver original
  1. WHERE Fecha >= '2010-12-27' AND Fecha <= '2011-01-05'
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 13/01/2011, 10:12
 
Fecha de Ingreso: mayo-2007
Mensajes: 35
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Ayuda con consulta SQL

Perfecto Leonardo_Jose, Funciono!!!

Las fechas las trato en formato ANSI tal como dices: yyyyMMdd

Gracias tambien a Libras y a iislas por su respuesta.

En cuanto a lo del >= y =< en las fechas lo confirmo: es mejor. A mi con el BETWEEN no me saca los registros del 05/01/2011.

Y ya abusando de vuestra amabilidad, como podria meter estos datos en un Crystal Report?? Es que estoy atascado en como sacar ese "Total", ya que no es un campo de las tablas.

Un saludo y muchas gracias por vuestra ayuda.
  #8 (permalink)  
Antiguo 13/01/2011, 11:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Ayuda con consulta SQL

Por aqui ya se dejo un LINK de mi buen amigo Maxi D'Accoto, donde nos explica el correcto uso de los campos tipo DATETIME y el porque no usar BETWEEN para hacer dichas comparaciones.
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 13/01/2011, 12:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Ayuda con consulta SQL

En un crystal saca la sumatoria de esos registros que quieres que te presenten, la verdad no recuerdo cual es la funcion, pero tambien puedes meter tu query y que obtenga los valores "calculados" no necesariamente los de la tabla, Iislas muchas gracias por la aclaracion lo tomare en cuenta :)

Saludos!
  #10 (permalink)  
Antiguo 14/01/2011, 06:42
 
Fecha de Ingreso: mayo-2007
Mensajes: 35
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Ayuda con consulta SQL

Cita:
Iniciado por iislas Ver Mensaje
Por aqui ya se dejo un LINK de mi buen amigo Maxi D'Accoto, donde nos explica el correcto uso de los campos tipo DATETIME y el porque no usar BETWEEN para hacer dichas comparaciones.
No he visto ese link, aunque lo buscare. Yo me acuerdo en la universidad que cuando tenias que sacar una consulta entre dos fechas y no usabas el between, directamente te cascaban un cero en ese ejercicio xDD

Cita:
Iniciado por Libras Ver Mensaje
En un crystal saca la sumatoria de esos registros que quieres que te presenten, la verdad no recuerdo cual es la funcion, pero tambien puedes meter tu query y que obtenga los valores "calculados" no necesariamente los de la tabla, Iislas muchas gracias por la aclaracion lo tomare en cuenta :)

Saludos!
Hola Libras la funcion que comentas creo que es la de sumatorio, pero no me funciona correctamente, o que yo no la uso bien. Tambien comentas que puedo meter mi query y obtener los valores. Me podrias decir la manera de hacer eso??

Un saludo y muchas gracias.
  #11 (permalink)  
Antiguo 14/01/2011, 12:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Ayuda con consulta SQL

Si mal no recuerdo hay una parte en donde puedes poner tu query, nada mas que como ya tiene tiempo que no manejo Crystal no recuerdo en donde es, nada mas te puedo decir que si se puede hacer eso :)

Saludos!
  #12 (permalink)  
Antiguo 14/01/2011, 12:49
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Ayuda con consulta SQL

CrepuX

Es bien sabido que cada UNIVERSIDAD, cualquiera que esta sea, de prestigio o no, tiene sus propios metodos de enseñanza, si a eso le agregamos que cada persona (profesor,a), piensa de forma diferente (y que bueno), entonces no tendremos la "verdad absoluta".

Lo que si es bien cierto, que Maxi, en su link, nos regala algunos ejemplos que el mismo llevo a cabo y nos muestra las diferencias que hay entre manejar un BETWEEN y un >= Y <=.

Ahora si, que cada quien tome sus propias decisiones, que seran las MEJORES para el mismo.

Saludos
__________________
MCTS Isaias Islas

Etiquetas: sql
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 18:30.