none
Sub Consulta que sume 2 promedios RRS feed

  • Pregunta

  • Hola

    Se tiene la siguiente tabla:

    CREATE TABLE NOTAS_ (
    ID_NOTA INT NOT NULL IDENTITY, 
    MATERIA VARCHAR(50),
    ESTUDIANTE VARCHAR(50), 
    NOTA DECIMAL(18,1), 
    PERIODO VARCHAR(50),
    REGISTRA VARCHAR(50), 
    PRIMARY KEY (ID_NOTA)
    );

    Con los siguientes registros:

    Select

    Con esta consulta se obtiene el 80% del promedio de notas registradas por el DOCENTE:

    with Lectura_Alumno as (SELECT MATERIA,NOTA*80/100 AS NOTA, cast (PERIODO as int) as PERIODO from NOTAS_ WHERE REGISTRA='DOCENTE' AND ESTUDIANTE='111')SELECT MATERIA, [1] as I, [2] as II, [3] as III, [4] as IV from Lectura_Alumno pivot (AVG (NOTA) for PERIODO in ([1], [2], [3], [4])) as P;

    Con esta consulta se obtiene el 20% del promedio de notas registradas por el ESTUDIANTE:

    with Lectura_Alumno as (SELECT MATERIA,NOTA*20/100 AS NOTA, cast (PERIODO as int) as PERIODO from NOTAS_ WHERE REGISTRA='ESTUDIANTE' AND ESTUDIANTE='111')SELECT MATERIA, [1] as I, [2] as II, [3] as III, [4] as IV from Lectura_Alumno pivot (AVG (NOTA) for PERIODO in ([1], [2], [3], [4])) as P;

    La consulta es: Como sumar el resultado del docente con el resultado del estudiante para que al final la nota definitiva sea 10.0 ?

    Con base en el ejemplo anterior el resultado una vez sumado deberia verse así:    

    80%DOCENTE + 20%ESTUDIANTE = 100%


    Respuesta de foro Microsoft


    • Editado yulfredy sábado, 4 de julio de 2020 22:53
    sábado, 4 de julio de 2020 22:47

Respuestas

  • Hola yulfredy:

    Puedes utilizar UNION ALL para obtener un subconjunto de las notas de ambos incluyendo el número de "parciales" que les aplican, y luego para trasponer las filas por columnas, utilizar sum ( case ,...)

    				
    	WITH NOTAS AS (SELECT MATERIA
    			  , sum(NOTA * 8 / 10) AS NOTA
    			  , cast(PERIODO as int) as PERIODO
    			  , count(*) as veces
    			  , 1 AS GRUPO
    				from NOTAS_
    				WHERE REGISTRA = 'DOCENTE' AND ESTUDIANTE = '111'
    				group by materia
    					   , periodo
    		 UNION ALL
    		 SELECT MATERIA
    			  , SUM(nota * 2 / 10) AS NOTA
    			  , cast(PERIODO as int) as PERIODO
    			  , count(*) as veces
    			  , 2 AS GRUPO
    				from NOTAS_
    				WHERE REGISTRA = 'ESTUDIANTE' AND ESTUDIANTE = '111'
    				group by materia
    					   , periodo),
    	 MEDIAS
    	 AS (SELECT MATERIA
    			  , PERIODO
    			  , NOTA / VECES AS NOTA
    			  , GRUPO
    				FROM NOTAS)
    	 SELECT MATERIA
    		  , SUM(CASE
    					 WHEN PERIODO = 1 THEN NOTA
    				END) AS I
    		  , SUM(CASE
    					 WHEN PERIODO = 2 THEN NOTA
    				END) AS II
    		  , SUM(CASE
    					 WHEN PERIODO = 3 THEN NOTA
    				END) AS III
    		  , SUM(CASE
    					 WHEN PERIODO = 4 THEN NOTA
    				END) AS IV
    			FROM MEDIAS
    			GROUP BY MATERIA;

    Union all

    https://javifer2.wordpress.com/2020/04/07/union-vs-union-all/

    Cte correlativo

    https://javifer2.wordpress.com/2018/12/18/with-cte-tablas-de-expresion-comun-2-correlativos/


    • Editado Javi Fernández F domingo, 5 de julio de 2020 4:15
    • Marcado como respuesta yulfredy domingo, 5 de julio de 2020 13:07
    domingo, 5 de julio de 2020 4:14

Todas las respuestas

  • Hola yulfredy:

    Puedes utilizar UNION ALL para obtener un subconjunto de las notas de ambos incluyendo el número de "parciales" que les aplican, y luego para trasponer las filas por columnas, utilizar sum ( case ,...)

    				
    	WITH NOTAS AS (SELECT MATERIA
    			  , sum(NOTA * 8 / 10) AS NOTA
    			  , cast(PERIODO as int) as PERIODO
    			  , count(*) as veces
    			  , 1 AS GRUPO
    				from NOTAS_
    				WHERE REGISTRA = 'DOCENTE' AND ESTUDIANTE = '111'
    				group by materia
    					   , periodo
    		 UNION ALL
    		 SELECT MATERIA
    			  , SUM(nota * 2 / 10) AS NOTA
    			  , cast(PERIODO as int) as PERIODO
    			  , count(*) as veces
    			  , 2 AS GRUPO
    				from NOTAS_
    				WHERE REGISTRA = 'ESTUDIANTE' AND ESTUDIANTE = '111'
    				group by materia
    					   , periodo),
    	 MEDIAS
    	 AS (SELECT MATERIA
    			  , PERIODO
    			  , NOTA / VECES AS NOTA
    			  , GRUPO
    				FROM NOTAS)
    	 SELECT MATERIA
    		  , SUM(CASE
    					 WHEN PERIODO = 1 THEN NOTA
    				END) AS I
    		  , SUM(CASE
    					 WHEN PERIODO = 2 THEN NOTA
    				END) AS II
    		  , SUM(CASE
    					 WHEN PERIODO = 3 THEN NOTA
    				END) AS III
    		  , SUM(CASE
    					 WHEN PERIODO = 4 THEN NOTA
    				END) AS IV
    			FROM MEDIAS
    			GROUP BY MATERIA;

    Union all

    https://javifer2.wordpress.com/2020/04/07/union-vs-union-all/

    Cte correlativo

    https://javifer2.wordpress.com/2018/12/18/with-cte-tablas-de-expresion-comun-2-correlativos/


    • Editado Javi Fernández F domingo, 5 de julio de 2020 4:15
    • Marcado como respuesta yulfredy domingo, 5 de julio de 2020 13:07
    domingo, 5 de julio de 2020 4:14
  • Mil gracias Javi

    Era exactemante lo que necesitaba.

    Pdta: Excelentes los POST que compartes, muy buen trabajo!!!


    Respuesta de foro Microsoft

    domingo, 5 de julio de 2020 13:13
  • Gracias
    domingo, 5 de julio de 2020 15:18
  • Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

    lunes, 6 de julio de 2020 15:55
    Moderador