2

Tengo una tabla donde tengo responsables con incidencias. Quiero sacar todos los responsables con todas las incidencias de cada uno, pero también aquellos que no tienen.
Tabla:

RESPONSABLES TIPO

Ejemplo con resultados de consulta (quiero responsables con incidencias de petición):

Primer_responsable 2
Segundo_responsable 0
Tercer_responsable 10
Cuarto_responsable 5

Voy a ser mas claro:

Cada incidencia puede ser de cuatro tipos: petición, error, subtarea o incidencia.

Y los responsables son personas diferentes.

Intento:

SELECT Responsable,COUNT(*)
FROM v_Reporte
WHERE `Tipo de Incidencia` LIKE '%Peticion%'
GROUP BY Responsable;

Pero no me salen aquellos que no tienen incidencias de peticion con valor 0.

introducir la descripción de la imagen aquí

Añado un ejemplo, para que quede aun más claro: http://www.sqlfiddle.com/#!9/4e3ff3/2

Mauricio Arias Olave
  • 3,098
  • 6
  • 26
  • 55
  • Ignacio Martínez Bienvenido, para que ti respuesta sea bien recibida por la comunidad te recomiendo que pongas código que lleves para que puedan ayudarte. Saludos. – Sebastián Lagos Yañez Apr 16 '18 at 13:26
  • Como comenta Sebastián, añade lo que hayas intentado, o al menos la definición de las tablas y algún dato. Échale un vistazo al [tour], [ask] y [mcve] – Kiko_L Apr 16 '18 at 13:29
  • ¿Podrías poner la definición de la tabla y algún dato de ejemplo? – Kiko_L Apr 16 '18 at 13:39
  • 1
    Insisto... ¿puedes poner algunos datos para poder intentar reproducir tu código? – Kiko_L Apr 16 '18 at 13:45
  • Son datos que no puedo mostrar, creo que la informacion detallada es suficiente. – Ignacio Martínez Apr 16 '18 at 13:46
  • Simplemente necesito que cuente como 0 los valores que no tiene incidencias del tipo detallado en la clausula WHERE – Ignacio Martínez Apr 16 '18 at 13:47
  • Si no fuera necesaria no te la estaríamos pidiendo. Por ejemplo. Al principio hablas de las tablas RESPONSABLES y TIPO, a continuación pones un intento de Select sobre un objeto llamado "v_reporte" que, supongo, será una vista pero no lo indicas y a continuación pones un pantallazo con una serie de campos sin explicar a qué tabla o vista pertenecen. Nosotros no sabemos nada de tu estructura de tablas, no des nada por sentado y trata de explicar todo mejor y con más orden. – Kiko_L Apr 16 '18 at 13:54
  • @IgnacioMartínez no necesitamos que los datos sean reales, podrían ser similares, falsos, para que podamos recrear el resultado y poder ayudarte mejor. También puedes crear aquí, en [SQLFiddle](http://www.sqlfiddle.com) tablas con valores falseados recreando así tu problema y que todos puedan ayudarte. :) – Aritzbn Apr 16 '18 at 13:56
  • Lo primero, especifico que es una tabla, no dos. Responsable y Tipo son campos. Lo necesario para lo consulta es lo especificado en la pregunta. Lo siento si te ha sentado mal la respuesta anterior, no era mi intencion, pero los datos de la tabla no puedo mostrarlos. Y si, trabajo sobre una vista. – Ignacio Martínez Apr 16 '18 at 13:57
  • @ignacioMartinez prueba lo que te he puesto, tal vez te dé algún error de sintaxis pero espero que te sirva como ejemplo, ahora mismo no tengo mucho tiempo – Aritzbn Apr 16 '18 at 14:10
  • 1
    @IgnacioMartínez para la proxima vez, es muy importante que en pregutnas sobre DB crees un [mcve] con datos y hasta campos falsos si no queres mostrar nada. pero lo tenes que hacer para que se pueda reproducir tu problema. – gbianchi Apr 16 '18 at 14:18

2 Answers2

2

Una buena opción es utilizar una expresión de evaluación en el COUNT():

COUNT(ALL expression) evaluates expression for each row in a group and returns the number of nonnull values.

SELECT Responsable,COUNT(case Tipo_Incidencia when 'Error' then 1 else NULL end)
FROM Tickets
GROUP BY Responsable;

Salida:

Responsable COUNT(case Tipo_Incidencia when 'Error' then 1 else NULL end)

Aurora 0

Maria 1

Mariano 1

Pedro 0

Te dejo aquí el SQLFiddle

Kiko_L
  • 6,455
  • 1
  • 11
  • 25
1

Edito la respuesta con la sentencia correcta y con el SQLFiddle correspondiente.

Consulta usando LEFT OUTER JOIN :

SELECT DISTINCT tickets.Responsable, COUNT(responsables.responsable) 
Incidencias
FROM tickets LEFT OUTER JOIN
(    SELECT responsable
     FROM Tickets
     WHERE tipo_incidencia like 'Peticion%') responsables 
ON responsables.Responsable = tickets.Responsable
GROUP BY responsable

De esta forma si que se obtienen los resultados.

Te dejo también una imagen sobre el funcionamiento de los outer joins. este enlace donde explican su funcionamiento mejor de lo que yo lo haría.. introducir la descripción de la imagen aquí

Aritzbn
  • 3,024
  • 1
  • 20
  • 48
  • Se obtiene el mismo resultado que la consulta que hice yo. Muchas gracias. – Ignacio Martínez Apr 16 '18 at 14:16
  • Creo que entonces necesitas hacer referencia a una tabla externa – Aritzbn Apr 16 '18 at 14:18
  • No existe ninguna tabla externa con los responsables, están todos en esa tabla. Yo espero que se pueda hacer, lo necesito para un reporte. Y no me sale... – Ignacio Martínez Apr 16 '18 at 14:23
  • El problema es que count, no cuenta registros en 0. hay que crear algo para que invente los registros que faltan, y eso no es tan facil.. – gbianchi Apr 16 '18 at 14:23
  • Yo estuve pensando en un cursor, pero con la herramienta que utilizo de reporting, no me sirve. – Ignacio Martínez Apr 16 '18 at 14:24
  • No. necesito que agregues un ejemplo con datos, y una salida como corresponde, asi no tengo que hacerlo yo. Pero lo que tenes que hacer se hace joineando un par de joins. y con subconsultas... @IgnacioMartínez – gbianchi Apr 16 '18 at 14:25
  • Vale, ya que veo que es mas importante de lo que creia, voy a crear una tabla como ejemplo y un resultado de la consulta que he realizado. – Ignacio Martínez Apr 16 '18 at 14:28
  • 3
    @IgnacioMartínez es importante, porque si te van a ayudar, es importante que des todas las herramientas para ayudarte. Si no, ademas de ayudarte, hay que tomarse el trabajo de hacer un ejemplo y validar datos como se creen que los necesitas vos. Parte de ayudarte, es que nos ayudes a ayudarte. – gbianchi Apr 16 '18 at 14:41
  • @gbianchi Tienes razón, ya he añadido un ejemplo en SQL Fiddle. Siento no haberlo hecho antes, pensaba que habia quedado claro. Un saludo y gracias de antemano a todos por ayudar. – Ignacio Martínez Apr 16 '18 at 16:01