none
Problema con datos SQL al unir tablas RRS feed

  • Pregunta


  • Excelente día, tengo una consulta la cual es la siguiente

    SELECT p.id, resultado, (count(resultado)*100)/(SELECT COUNT(*) FROM IAssesment_Evaluaciones WHERE area='TlP/LOP2.1') count FROM IAssesment_Evaluaciones e INNER JOIN IAssesment_Resultados r ON e.id=r.id_evaluacion LEFT OUTER JOIN IAssesment_Tipo_Resultados t ON t.id=r.resultado INNER JOIN IAssesment_Preguntas p ON r.id_pregunta=p.id WHERE area='TlP/LOP2.1' GROUP BY resultado,p.id ORDER BY p.id,resultado

    Esta consulta muestra bien los datos

    id    resultado    count
    1    2             100
    2    2             100
    3    2             50
    3    3             50
    4    1             33
    4    2             66
    5    1             50
    5    2             33
    5    3             16
    6    1             16
    6    2             83
    7    1             33
    7    2             16
    7    3             50
    8    1             50
    8    2             33
    8    3             16
    9    1             83
    9    3             16
    10    1             83
    10    3             16
    11    1             33
    11    2             16
    11    3             50
    12    1             66
    12    3             33
    13    1             100
    14    1             16
    14    2             33
    14    3             50
    15    1             50
    15    2             50
    16    1             66
    16    2             33
    17    1             50
    17    2             50

    Mi problema es que la tabla de

    IAssesment_Tipo_Resultados

    tiene 3 tipos de resultados (1,2,3)

    Lo que necesito es que mi consulta me regrese los 3 tipos de valores aunque no tenga ningun valor

    como ejemplo de los resultados de la consulta anterior, este es el resultado que necesito

    id    resultado    count
    1    2             100

    1 1          0

    1 3          0

    Me dijeron que intentara esta consulta pero me repite todos los datos

    SELECT 
    	p.id, t.id, 
    	CASE 
    		WHEN r.resultado = t.id THEN 
    			(COUNT(r.resultado) * 100) / 
    				(SELECT COUNT(*) FROM IAssesment_Evaluaciones WHERE area = 'TlP/LOP2.1') 
    		ELSE 0
    	END Cuenta
    FROM 
    	IAssesment_Evaluaciones e 
    	INNER JOIN IAssesment_Resultados r ON e.id = r.id_evaluacion 	
    	INNER JOIN IAssesment_Preguntas p ON r.id_pregunta = p.id 
    	CROSS APPLY (SELECT id FROM IAssesment_Tipo_Resultados) t 
    WHERE e.area = 'TlP/LOP2.1' 
    GROUP BY p.id, r.resultado, t.id
    ORDER BY p.id, r.resultado, t.id;

    Gracias por su ayuda

    martes, 10 de abril de 2018 15:38

Respuestas

  • Hola:

    una posible que la solución puede ser haciendo un Right Outer Join, en lugar de un Left Outer Join, ya que según como está conformada la relación, la tabla "IAssesment_Tipo_Resultados" está al lado derecho, no al izquierdo.

    SELECT p.id, resultado, 
    (count(resultado)*100)/(SELECT COUNT(*) FROM IAssesment_Evaluaciones WHERE area='TlP/LOP2.1') count 
    FROM IAssesment_Evaluaciones e 
    INNER JOIN IAssesment_Resultados r ON e.id=r.id_evaluacion 
    RIGTH OUTER JOIN IAssesment_Tipo_Resultados t ON t.id=r.resultado 
    INNER JOIN IAssesment_Preguntas p ON r.id_pregunta=p.id 
    WHERE area='TlP/LOP2.1' 
    GROUP BY resultado,p.id 
    ORDER BY p.id,resultado

    Saludos cordiales.


    Camilo Villa

    martes, 10 de abril de 2018 17:15

Todas las respuestas

  • Hola:

    una posible que la solución puede ser haciendo un Right Outer Join, en lugar de un Left Outer Join, ya que según como está conformada la relación, la tabla "IAssesment_Tipo_Resultados" está al lado derecho, no al izquierdo.

    SELECT p.id, resultado, 
    (count(resultado)*100)/(SELECT COUNT(*) FROM IAssesment_Evaluaciones WHERE area='TlP/LOP2.1') count 
    FROM IAssesment_Evaluaciones e 
    INNER JOIN IAssesment_Resultados r ON e.id=r.id_evaluacion 
    RIGTH OUTER JOIN IAssesment_Tipo_Resultados t ON t.id=r.resultado 
    INNER JOIN IAssesment_Preguntas p ON r.id_pregunta=p.id 
    WHERE area='TlP/LOP2.1' 
    GROUP BY resultado,p.id 
    ORDER BY p.id,resultado

    Saludos cordiales.


    Camilo Villa

    martes, 10 de abril de 2018 17:15
  • Hola @Camilo, gracias por tu respuesta, ya lo he intentado y me salen los mismos datos, me parece que es por el group by que estoy haciendo
    martes, 10 de abril de 2018 17:32