none
Incluir datos inexistentes RRS feed

  • Pregunta

  • Buenas tardes.

    Tengo una tabla con los datos:

    Año   Mes   Código   Valor

    2017 Ene   123        5000

    2017 Ene   456        6000

    2017 Feb   123        1000

    2017 Mar   123        2000

    2017 Mar   456        2000

    Y necesito un sql que filtre el código buscado, sumando el dato "Valor" por mes, por código, pero incluyendo los meses sin dato con "Valor" en 0, ejemplo:

    Año   Mes   Código   Valor

    2017 Ene   456        6000

    2017 Feb   456             0

    2017 Mar   456        2000

    Por su ayuda, gracias de antemano.

    jueves, 1 de marzo de 2018 21:56

Respuestas

  • Muchas gracias, me sirvió de base, lo soucioné así:

    SELECT t.Anio, t.Mes, t.Código, SUM(Valor) FROM (SELECT distinct MyTable.Anio, MyTable.Mes, "456" as Código, 0 as Valor FROM MyTable UNION SELECT MyTable.Anio, MyTable.Mes, MyTable.partida, MyTable.dato FROM MyTable WHERE MyTable.Partida="456") t GROUP BY t.Anio, t.Mes, t.Código

    • Marcado como respuesta Erick Naranjo viernes, 2 de marzo de 2018 22:04
    viernes, 2 de marzo de 2018 22:04

Todas las respuestas

  • Por ejemplo:

    DECLARE @MyTable table (Año int, Mes varchar(100), Código int, Valor decimal(9,2));
    DECLARE @Codigo int = 456;
    INSERT INTO @MyTable VALUES
    (2017, 'Ene', 123, 5000),
    (2017, 'Ene', 456, 6000),
    (2017, 'Feb', 123, 1000),
    (2017, 'Mar', 123, 2000),
    (2017, 'Mar', 456, 2000);
    
    SELECT
        t.Año, t.Mes, COALESCE(t2.Código, @Codigo) AS Codigo, COALESCE(t2.Valor, 0) AS Valor
    FROM
        (SELECT t.Año, t.Mes FROM @MyTable t GROUP BY t.Año, t.Mes) t
        LEFT JOIN @MyTable t2 ON t.Año = t2.Año AND t.Mes = t2.Mes
    	   AND t2.Código = @Codigo;
    GO

    jueves, 1 de marzo de 2018 23:09
  • Muchas gracias, me sirvió de base, lo soucioné así:

    SELECT t.Anio, t.Mes, t.Código, SUM(Valor) FROM (SELECT distinct MyTable.Anio, MyTable.Mes, "456" as Código, 0 as Valor FROM MyTable UNION SELECT MyTable.Anio, MyTable.Mes, MyTable.partida, MyTable.dato FROM MyTable WHERE MyTable.Partida="456") t GROUP BY t.Anio, t.Mes, t.Código

    • Marcado como respuesta Erick Naranjo viernes, 2 de marzo de 2018 22:04
    viernes, 2 de marzo de 2018 22:04