none
Sumar columnas RRS feed

  • Pregunta

  • Fecha_Dia Codigo_Clase Cant Nota HP Creditos Termino

    2020-08-03 ANAT 100 1 B 12 4 1901 2020-08-03 COMP 208 1 B 9 3 1901 2020-08-03 ENFE 102 1 D 2 2 1901 2020-08-03 ENFE 101 1 B 9 3 1901 2020-08-03 ENFE 100 1 B 9 3 1901 2020-10-27 ANAT 100 2 C 8 4 1910 2020-10-27 ENFE 104 1 B 6 2 1910

    Lo que quiero es que me sume los HP y Los Creditos y luego los divida en otra columna pero que en caso que la clase este repetida no cuente el los hp y creditos cuando la columna Cant sea el numero mayor osea la clase ANAT 100 se repite y en la columna cant se ve que hay un numero uno y un numero dos en la misma clase ANAT 100 entonces solo me debe sumar el valor cuando la columna cant sea mayor

    el resultado deberia ser algo como

    HP     Creditos  Promedio

    43         17          2.53(redibdeado a dos lugares decimales)

    no conto en HP ni los creditos de la clase ANAT 100 donde la columna cant es 1 osea conto el valor mayor donde se repite la clase


    • Editado Efrain Diaz miércoles, 28 de octubre de 2020 21:51
    miércoles, 28 de octubre de 2020 21:50

Respuestas

  • Hola Efrain Diaz:

    Create Table dbo.creditos
    			 (
    			 fecha_dia    Date
    		   , codigo_clase VarChar(10)
    		   , cant         Int
    		   , nota         char(1)
    		   , hp           Int
    		   , creditos     Int
    		   , termino      Int
    			 );
    Go
    Insert into dbo.Creditos 
    (Fecha_dia , Codigo_clase , Cant , Nota , HP , Creditos , termino )
    values
    
    ('2020-08-03','ANAT 100',1,'B',12,	4,1901),
    ('2020-08-03','COMP 208',1,'B',9,   3,1901),
    ('2020-08-03','ENFE 102',1,'D',2,   2,1901),
    ('2020-08-03','ENFE 101',1,'B',9,   3,1901),
    ('2020-08-03','ENFE 100',1,'B',9,   3,1901),
    ('2020-10-27','ANAT 100',2,'C',8,   4,1910),
    ('2020-10-27','ENFE 104',1,'B',6,   2,1910);
    go

    Con el escenario, utilizamos una tabla de expresión común para eliminar la fila ANAT 100 de Cant = 1

    Y con la salida del conjunto ya sumamos los valores para la columna de hp y créditos, para realizar la operación.

    protegemos la misma contra la división entre 0.

    With cte
    	 As (Select codigo_clase
    			  , Max(cant) As mxcant
    				From dbo.creditos
    				Group By codigo_clase)
    	 Select Sum(creditos.hp) As hp
    		  , Sum(creditos.creditos) As creditos
    		  , Cast(Sum(creditos.hp) * 1.0 / Case
    											  When Sum(creditos.creditos) = 0 Then 1
    										  Else Sum(creditos.creditos) * 1.0
    										  End As Decimal(5, 2)) As promedio
    			From cte
    				 Inner Join dbo.creditos On creditos.codigo_clase = cte.codigo_clase And creditos.cant = cte.mxcant;

    Cte

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

    • Marcado como respuesta Efrain Diaz miércoles, 28 de octubre de 2020 23:28
    miércoles, 28 de octubre de 2020 22:18