none
Hacer un filtro con WHERE que seleccion uno, varios o todas las opciones RRS feed

  • Pregunta

  • Cordial saludo, en al actualidad he realizado varias vistas de una tabla para ver los datos por un año en especifico o por varios años o por todos los años (tres vistas en total)

    Ahora pensé que debe existir la forma de filtrar por un solo año o por varios años o por todos en una misma instrucción y así no tener que hacer varias vistas.

    Me gustaría saber si es correcto lo que digo y como seria la forma de hacerlo.

    Gracias


    Germanq

    miércoles, 2 de septiembre de 2020 11:45

Respuestas

  • Hola Germanq:

    Select sum(case when año = 2017 then ingresos end )as [2017],
    
    sum(case when año=2018 then ingresos end ) as [2018],
    
    sum(case when año in (2017,2018) then ingresos end) as [2017 y 2018],
    
    sum(ingresos) as total
    
    from tabla
    where año > 2016
    

    Como ves la función sum, puede ser condicionada.




    miércoles, 2 de septiembre de 2020 15:38

Todas las respuestas

  • Hola Germanq:

    ¿Y eso no es lo mismo que filtrar entre dos fechas?. Supongamos que quieres filtrar de este año.

    select  * from tuTabla
    Where tuFecha>= DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)
    and 
    tuFecha < DATEADD(yy,1, DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)) 

    Más fácil, pero menos correcto.

    select  * from tuTabla
    Where year(tuFecha)=YEAR(getdatE()

    Partiendo de esta base, si tu quieres varios años, solo tienes que reducir el inicio.

    select  * from tuTabla
    -- El -3 significa 
    Where tuFecha>= DATEADD(yy,-3,-- -3 = 1 de enero de 2017
              DATEADD(yy,
                 DATEDIFF(yy,0,GETDATE()),0))
    and 
    tuFecha < DATEADD(yy,1, DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)) 
    -- 1 de enero de 2021. Por eso menor que.

    O del modo fácil

    SELECT * FROM 
    TUTABLA 
    WHERE
     YEAR(tuFecha) > YEAR(Getdate()) - 3 -- año 2017
    and
    YEAR(tuFecha) < YEAR(GETDATE())+1

    La función year retorna un int, que corresponde con el año de una fecha.

    A la cual le puedes sumar o restar lo que necesites.

    Funciones de fecha útiles

    https://javifer2.wordpress.com/2019/12/15/funciones-de-fecha-para-datetime-utiles/

    miércoles, 2 de septiembre de 2020 12:38
  • Hola de nuevo Germanq:

    Caso de que te plantee dudas, o simplemente no encaje con tú pregunta, tienes, que mejorar un poco el escenario, tanto en el tipo de dato que manejas como columna de fecha, como cuales son los requisitos, que quieres. Sobre todo esa parte de varios años.

    Ya comentas.

    miércoles, 2 de septiembre de 2020 13:10
  • Cordial saludo, pongo un escenario para la pregunta:

    digamos que tengo el campo año y el campo ingresos. los registros serian:

    2017,1000000

    2017,500000

    2018,2000000

    2019,3000000

    digamos que deseo que solo en una consulta me permita saber lo siguiente:

    cuanto suman los ingresos en los años 2017,

    cuanto suman los ingresos en los año 2017 y 2018

    cuanto suman los ingresos de todos los años.

    Claramente esto se puede hacer con varias consultas, pero deseo tener una sola consulta donde en el WHERE puede escoger cualquiera de estas opciones. Esto lo pensé tomando como referencia EXCEL donde una pone un filtro y puede escoger un año, varios años o todos los años.

    Es posible algo asi en SQL SERVER o es necesario tener varias consultas


    Germanq

    miércoles, 2 de septiembre de 2020 15:31
  • Hola Germanq:

    Select sum(case when año = 2017 then ingresos end )as [2017],
    
    sum(case when año=2018 then ingresos end ) as [2018],
    
    sum(case when año in (2017,2018) then ingresos end) as [2017 y 2018],
    
    sum(ingresos) as total
    
    from tabla
    where año > 2016
    

    Como ves la función sum, puede ser condicionada.




    miércoles, 2 de septiembre de 2020 15:38
  • Gracias Javi.

    Germanq

    viernes, 4 de septiembre de 2020 13:11