none
Eliminar Nomes duplicados e somar valores de cada ocorrência RRS feed

  • Pergunta

  • Tenho uma sentença SQL da seguinte forma:

    SELECT t1.chave_fato, t1.cod_filial, t1.cod_docto, t1.cod_tipo_mv, t1.cod_cli_for, t2.nome_cadastro, FORMAT(t1.valor_total, 'n', 'pt-br') AS valor_total,
    FORMAT(t1.valor_total * 0.012, 'n', 'pt-br') AS previdencia, FORMAT(t1.valor_total * 0.002, 'n', 'pt-br') AS senar, FORMAT(t1.valor_total * 0.001, 'n', 'pt-br') AS gilrat,
    CONVERT(CHAR, t1.data_v2, 103) AS data_base
    FROM tbentradas AS t1 JOIN tbCadastroGeral AS t2 ON t1.cod_cli_for = t2.cod_cadastro
    WHERE t1.data_v2 BETWEEN '2019-08-01' AND '2019-08-31' AND t1.valor_total <> '0.00' AND t1.cod_filial = '100' AND t1.cod_tipo_mv IN ('819','816')
    ORDER BY t2.nome_cadastro ASC

    O resultado é esse:

    Notem a coluna nome_cadastro, preciso que apareça apenas um nome sem repetir, porém os valores previdencia, senar e gilrat de cada ocorrência sejam totalizados (somados).

    Como altero a sentença para fazer isso?

    sábado, 14 de setembro de 2019 03:28

Respostas

  • Notem a coluna nome_cadastro, preciso que apareça apenas um nome sem repetir, porém os valores previdencia, senar e gilrat de cada ocorrência sejam totalizados (somados).

    Flávio, para obter o relatório da forma que quer é necessário agrupar as linhas mas para isto é necessário que sejam retiradas do resultado as colunas chave_fato, cod_tipo_mov e data_base, pois elas possuem valores diferentes para um mesmo valor de nome_cadastro.

    Experimente:

    -- código #1 SELECT t1.cod_filial, t1.cod_docto, t1.cod_cli_for, t2.nome_cadastro, format (sum (t1.valor_total), 'n', 'pt-br') as valor_total, format (sum (t1.valor_total * 0.012), 'n', 'pt-br') as previdencia, format (sum (t1.valor_total * 0.002), 'n', 'pt-br') as senar, format (sum (t1.valor_total * 0.001), 'n', 'pt-br') as gilrat
    from tbentradas as t1 inner join tbCadastroGeral as t2 on t1.cod_cli_for = t2.cod_cadastro
    where t1.data_v2 between '2019-08-01' and '2019-08-31' and t1.valor_total <> 0.00 and t1.cod_filial = '100' and t1.cod_tipo_mv in ('819','816')

    group by t1.cod_filial, t1.cod_docto, t1.cod_cli_for, t2.nome_cadastro
    order by nome_cadastro;

     


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    sábado, 14 de setembro de 2019 10:55

Todas as Respostas

  • Notem a coluna nome_cadastro, preciso que apareça apenas um nome sem repetir, porém os valores previdencia, senar e gilrat de cada ocorrência sejam totalizados (somados).

    Flávio, para obter o relatório da forma que quer é necessário agrupar as linhas mas para isto é necessário que sejam retiradas do resultado as colunas chave_fato, cod_tipo_mov e data_base, pois elas possuem valores diferentes para um mesmo valor de nome_cadastro.

    Experimente:

    -- código #1 SELECT t1.cod_filial, t1.cod_docto, t1.cod_cli_for, t2.nome_cadastro, format (sum (t1.valor_total), 'n', 'pt-br') as valor_total, format (sum (t1.valor_total * 0.012), 'n', 'pt-br') as previdencia, format (sum (t1.valor_total * 0.002), 'n', 'pt-br') as senar, format (sum (t1.valor_total * 0.001), 'n', 'pt-br') as gilrat
    from tbentradas as t1 inner join tbCadastroGeral as t2 on t1.cod_cli_for = t2.cod_cadastro
    where t1.data_v2 between '2019-08-01' and '2019-08-31' and t1.valor_total <> 0.00 and t1.cod_filial = '100' and t1.cod_tipo_mv in ('819','816')

    group by t1.cod_filial, t1.cod_docto, t1.cod_cli_for, t2.nome_cadastro
    order by nome_cadastro;

     


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    sábado, 14 de setembro de 2019 10:55
  • Muito obrigado José Dias, deu certinho. Uma pena ter que eliminar as outra colunas, mas elas não fariam sentido na aplicação final do relatório.
    sábado, 14 de setembro de 2019 17:37