none
Ayuda en agrupación con campo calculado RRS feed

  • Pregunta

  • Tengo una consulta con dos tablas de una tomo documento del usuario y fecha de nacimiento, y de la otra la fecha del movimiento, requiero calcular la edad (fecha de movimiento vs fecha de nacimiento) y con esta contar cuantas personas cumplen el criterio y con el documento contar cuantos usuarios en cada rango hay.

    Ejemplo de lo que requiero

    Rango               no_usuarios

    0-17                  15

    18-60                54

    61ymas             31

    Tanto el Rango como el campo no_usuarios son calculados.

    Probé con esta y obtuve el resultado por día como muestro después.

    DECLARE @FECHA1 DATETIME

    DECLARE @FECHA2 DATETIME

    SET @FECHA1='01/01/2017'

    SET @FECHA2='31/03/2017'

    /* 3 - SELECCION DE LOS RANDOS DE EDAD TOTALES */

    SELECT RANGO_EDAD = CASE

          WHEN ABS((DATEDIFF(YEAR,PA.FE_NACI_PAC, MC.FE_FECH_MOVI))) >= 0

                AND ABS((DATEDIFF(YEAR,PA.FE_NACI_PAC, MC.FE_FECH_MOVI))) <= 17  THEN '00-17'

          WHEN ABS((DATEDIFF(YEAR,PA.FE_NACI_PAC, MC.FE_FECH_MOVI))) >= 18

                AND ABS((DATEDIFF(YEAR,PA.FE_NACI_PAC, MC.FE_FECH_MOVI))) <= 59 THEN '18-59'

          WHEN ABS((DATEDIFF(YEAR,PA.FE_NACI_PAC, MC.FE_FECH_MOVI))) >= 60 THEN '60-120'

          ELSE 'OTRO'  

        END, COUNT(PA.NU_HIST_PAC) AS TOTAL

          FROM PACIENTES PA INNER JOIN

                MOVI_CARGOS MC ON PA.NU_HIST_PAC = MC.NU_HIST_PAC_MOVI INNER JOIN

                LABORATORIO LA ON MC.NU_NUME_MOVI = LA.NU_NUME_MOVI_LABO

          WHERE MC.FE_FECH_MOVI BETWEEN @FECHA1 AND @FECHA2+1

                AND PA.CD_CODI_GPOB_PAC IN('9')

               GROUP BY PA.FE_NACI_PAC, MC.FE_FECH_MOVI

    RANGO             USUARIO

    00-17                2

    18-59                1

    18-59                6

    18-59                1

    60-120              1

    60-120              1

    martes, 5 de septiembre de 2017 14:23

Respuestas

  • Debes agrupar según los rangos de fecha que has definido, por ejemplo:

    DECLARE @FECHA1 datetime = '20170101';
    DECLARE @FECHA2 datetime = '20170331';
    
    SELECT 
        CASE 
    	   WHEN T.Años BETWEEN 0 AND 17 THEN '00-17'
    	   WHEN T.Años BETWEEN 18 AND 59 THEN '18-59'
    	   WHEN T.Años BETWEEN 60 AND 120 THEN '>60'
        END AS [Rango],
        COUNT(*) AS [Total]
    FROM 
        PACIENTES PA
        INNER JOIN MOVI_CARGOS MC ON PA.NU_HIST_PAC = MC.NU_HIST_PAC_MOVI
        INNER JOIN LABORATORIO LA ON MC.NU_NUME_MOVI = LA.NU_NUME_MOVI_LABO
        CROSS APPLY (VALUES(DATEDIFF(YEAR, PA.FE_NACI_PAC, MC.FE_FECH_MOVI))) T(Años)
    WHERE 
        MC.FE_FECH_MOVI BETWEEN @FECHA1 AND @FECHA2 + 1
        AND PA.CD_CODI_GPOB_PAC IN('9')
    GROUP BY 
        CASE 
    	   WHEN T.Años BETWEEN 0 AND 17 THEN '00-17'
    	   WHEN T.Años BETWEEN 18 AND 59 THEN '18-59'
    	   WHEN T.Años BETWEEN 60 AND 120 THEN '>60'
        END
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta FENIX1970 martes, 5 de septiembre de 2017 17:19
    martes, 5 de septiembre de 2017 14:40

Todas las respuestas

  • Debes agrupar según los rangos de fecha que has definido, por ejemplo:

    DECLARE @FECHA1 datetime = '20170101';
    DECLARE @FECHA2 datetime = '20170331';
    
    SELECT 
        CASE 
    	   WHEN T.Años BETWEEN 0 AND 17 THEN '00-17'
    	   WHEN T.Años BETWEEN 18 AND 59 THEN '18-59'
    	   WHEN T.Años BETWEEN 60 AND 120 THEN '>60'
        END AS [Rango],
        COUNT(*) AS [Total]
    FROM 
        PACIENTES PA
        INNER JOIN MOVI_CARGOS MC ON PA.NU_HIST_PAC = MC.NU_HIST_PAC_MOVI
        INNER JOIN LABORATORIO LA ON MC.NU_NUME_MOVI = LA.NU_NUME_MOVI_LABO
        CROSS APPLY (VALUES(DATEDIFF(YEAR, PA.FE_NACI_PAC, MC.FE_FECH_MOVI))) T(Años)
    WHERE 
        MC.FE_FECH_MOVI BETWEEN @FECHA1 AND @FECHA2 + 1
        AND PA.CD_CODI_GPOB_PAC IN('9')
    GROUP BY 
        CASE 
    	   WHEN T.Años BETWEEN 0 AND 17 THEN '00-17'
    	   WHEN T.Años BETWEEN 18 AND 59 THEN '18-59'
    	   WHEN T.Años BETWEEN 60 AND 120 THEN '>60'
        END
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta FENIX1970 martes, 5 de septiembre de 2017 17:19
    martes, 5 de septiembre de 2017 14:40
  • Muchísimas gracias… Justo lo que necesitaba.

    Q bien. 

    martes, 5 de septiembre de 2017 17:19