Jump to content
c3s1nha

Somar valores no final de uma coluna

Recommended Posts

Boa tarde,

Gostaria de somar os valores das colunas D, D1, V1, V2, V3, V4 no final da tabela, é possivel ?

 

Estou utilizando a seguindo query:

 

SELECT
CONVERT(CHAR(10), Discos.Discos_sdt_Data, 103) As [Data],           
COUNT(DISTINCT Discos.Pessoa_lng_Codigo) as [D], 
COUNT(Discos.Discos_lng_Sequencia) AS [D1], 
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor), 2)))), '.', ',') as [V1],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V2],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(Sum (Discos.Discos_mon_Tarifa), 2)))), '.', ',') As [V3],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V4]  
FROM Discos
Group By Discos.Discos_sdt_Data
Having (((Discos.Discos_sdt_Data) Between '2019-01-01' And '2019-01-10'))
Order By [D]

 

Com este codigo consigo a somatorio conforme imagem, porem, queria adicionar um a somatoria total no final das colunas.

totaliza.jpg

 

 

Por favor, poderiam me ajudar.

Share this post


Link to post
Share on other sites

Uma forma

 

Select data,D, D1, V1, V2 , V3 , V4,

(D+D1+V1+V2+V3+V4) tot

From

(

SELECT
CONVERT(CHAR(10), Discos.Discos_sdt_Data, 103) As [Data],           
COUNT(DISTINCT Discos.Pessoa_lng_Codigo) as [D],
COUNT(Discos.Discos_lng_Sequencia) AS [D1],
REPLACE(RTRIM(LTRIM (CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor), 2)))), '.', ',') as [V1],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V2],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(Sum (Discos.Discos_mon_Tarifa), 2)))), '.', ',') As [V3],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V4]  
FROM Discos
Group By Discos.Discos_sdt_Data
Having (((Discos.Discos_sdt_Data) Between '2019-01-01' And '2019-01-10'))

)

Order by data

 

Share this post


Link to post
Share on other sites

Obrigado pelo retorno Motta, porem ainda nao consegui, deste jeito que você mandou apresento o seguinte erro:

 

Msg 156, Level 15, State 1, Line 23
Incorrect syntax near the keyword 'Order'.
 

 

 

Share this post


Link to post
Share on other sites

não conheço sqlserver a fundo , talvez a tabela virtual tenha de ter alias , tente

 

...

Select data,D, D1, V1, V2 , V3 , V4,
(D+D1+V1+V2+V3+V4) tot
From
(
SELECT
CONVERT(CHAR(10), Discos.Discos_sdt_Data, 103) As [Data],           
COUNT(DISTINCT Discos.Pessoa_lng_Codigo) as [D],
COUNT(Discos.Discos_lng_Sequencia) AS [D1],
REPLACE(RTRIM(LTRIM (CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor), 2)))), '.', ',') as [V1],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V2],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(Sum (Discos.Discos_mon_Tarifa), 2)))), '.', ',') As [V3],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V4]  
FROM Discos
Group By Discos.Discos_sdt_Data
Having (((Discos.Discos_sdt_Data) Between '2019-01-01' And '2019-01-10'))
) virtual
Order by D

 

 

Share this post


Link to post
Share on other sites

ainda, nao conegui,  :/

 

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '500,00' to data type int.

 

acredito ser algum problema de conversao das colunas 

D, D1, V1, V2 , V3 , V4

Share this post


Link to post
Share on other sites

Limpe toda as conversões na hora de somar , amanhã se tiver tempo edito esta sql no pc , estou no tablet agora.

Share this post


Link to post
Share on other sites

talvez falte um convert

 

SELECT
CONVERT(CHAR(10), Discos.Discos_sdt_Data, 103) As [Data],           
COUNT(DISTINCT Discos.Pessoa_lng_Codigo) as [D],
COUNT(Discos.Discos_lng_Sequencia) AS [D1],
REPLACE(RTRIM(LTRIM (CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor), 2)))), '.', ',') as [V1],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V2],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(Sum (Discos.Discos_mon_Tarifa), 2)))), '.', ',') As [V3],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V4]  ,
(
COUNT(DISTINCT Discos.Pessoa_lng_Codigo) +
COUNT(Discos.Discos_lng_Sequencia) +
ROUND(SUM(Discos.Discos_mon_Valor), 2))+
ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2)) +
ROUND(Sum (Discos.Discos_mon_Tarifa), 2)) +
ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2)) ) [TOT]
FROM Discos
Group By Discos.Discos_sdt_Data
Having (((Discos.Discos_sdt_Data) Between '2019-01-01' And '2019-01-10'))
) virtual
Order by D

Share this post


Link to post
Share on other sites

BOM DIA MOTTA,

Obrigado pela ajuda!! 

Agora nao deu erro, porem o resultado que obtive nao é o esperado.

O resultado atual esta aparecendo a soma da linha da tabela. O que quero é a soma de cada COLUNA da tabela, veja a imagem, creio que da pra entender melhor:

 

 

totaliza2.jpg

(escrevi coluna D1, mas no exemplo esta selecionada a coluna D)

 

 

Share this post


Link to post
Share on other sites

CUBE OU ROLLUP

 

 

 

SELECT
CONVERT(CHAR(10), Discos.Discos_sdt_Data, 103) As [Data],           
COUNT(DISTINCT Discos.Pessoa_lng_Codigo) as [D],
COUNT(Discos.Discos_lng_Sequencia) AS [D1],
REPLACE(RTRIM(LTRIM (CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor), 2)))), '.', ',') as [V1],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V2],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(Sum (Discos.Discos_mon_Tarifa), 2)))), '.', ',') As [V3],
REPLACE(RTRIM(LTRIM(CONVERT(CHAR(20), ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2)))), '.', ',') AS [V4]  ,
(
COUNT(DISTINCT Discos.Pessoa_lng_Codigo) +
COUNT(Discos.Discos_lng_Sequencia) +
ROUND(SUM(Discos.Discos_mon_Valor), 2))+
ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2)) +
ROUND(Sum (Discos.Discos_mon_Tarifa), 2)) +
ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2)) ) [TOT]
FROM Discos
Group By CUBE (Discos.Discos_sdt_Data)
Having (((Discos.Discos_sdt_Data) Between '2019-01-01' And '2019-01-10'))
) virtual
Order by D

Share this post


Link to post
Share on other sites

Bom dia Motta,

 

Obrigado pela ajuda,

 

Consegui com o código abaixo:

 

SELECT 
    CASE
        WHEN (Discos.Discos_sdt_Data is not null) THEN CONVERT(CHAR(10), Discos.Discos_sdt_Data, 103)
         ELSE 'Total'
            END AS D,
    COUNT(distinct(Discos.Pessoa_lng_Codigo)) as [D1], 
    COUNT(Discos.Pessoa_lng_Codigo) AS [V1], 
    ROUND(SUM(Discos.Discos_mon_Valor), 2) as [V2],
    ROUND(SUM(Discos.Discos_mon_Valor)/COUNT(Discos.Discos_lng_Sequencia), 2) AS [V3],
    ROUND(Sum (Discos.Discos_mon_Tarifa), 2) As [Tarifa Discos],
    ROUND(SUM(Discos.Discos_mon_Tarifa)/COUNT(Discos.Discos_lng_Sequencia), 2) AS [V4]

 

FROM Discos

 

WHERE Discos.Discos_sdt_Data between '2019-01-01' And '2019-01-10'

 

GROUP BY Discos.Discos_sdt_Data WITH cube

 

ORDER BY [D]

 

 

Resultado:

 

 

Unica coisa que estou resolvendo é a coluna D1, o total dela não esta batendo, estou verificando, mas é isso.

 

Obrigado.

 

até mais!!

totaliza3.jpg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By adrianno
      Boa noite, tenho a seguinte questão, tenho uma tabela com  campo  "valor"  que guarda um valor monetário e campo "data" com a data do lançamento e um campo "tipo" marcando se é entrada ou saida,  ao cadastrar um valor, coloco a data e qual tipo "entrada" ou "saida"    quero montar uma view que soma todos os valores por mês, separados por tipo, se é entrada ou saida.   A seguinte query me tras a soma, porém não agrupa pelo MES/ANO
      SELECT DATE_FORMAT(data, "%m/%Y") as MES, (select Sum(valor) from controle WHERE tipo = 'SAIDA' ) as VS, // soma tudo que for SAIDA (select Sum(valor) from controle WHERE tipo = 'ENTRADA' ) as VE // soma tudo que for ENTRADA FROM controle GROUP BY YEAR(data), MONTH(data) // agrupa por ANO/MES mas este grupo nao opera nas somas dos valores ORDER BY data DESC  Esta query  somas os valores  mas não filtra pelo mes/ano e tras a soma total de tudo ignorando o mes,  mostra o mesmo valor total de cada tipo em todos os meses:
      EXEMPLO DO RESULTADO
      MES                 VS(saida)     VE(entrada)
      06/2020         4600,00        9750,00
      05/2020         4600,00        9750,00
      04/2020         4600,00        9750,00
       
      Na prática cada mês deveria retornar as somas dos valores apenas dele. Como fazer com que  GROUP BY YEAR(data), MONTH(data)   tenha efeito correto em cada tipo?   
    • By junior3d
      Estudo há poucos dias PHP e gostaria de saber no trecho abaixo por que usa-se o bindValue para jogar o conteúdo da variável na sql do método prepare do PDO?
      segue o trecho:
      $sql = $pdo->prepare("INSERT INTO usuarios (nome, email, telefone, senha) VALUES (:n, :t, :e, :s)"); $sql->bindValue(":n",$nome); $sql->bindValue(":t",$telefone); $sql->bindValue(":e",$email); $sql->bindValue(":s",$senha); $sql->execute(); Por que não poderia assim?
      $sql = $pdo->prepare("INSERT INTO usuarios (nome, email, telefone, senha) VALUES ($nome, $telefone, $email $senha)"); $sql->execute();  
    • By sirrocha
      Pessoal, tenho duas tabelas. Uma se chama prestacoes e a outra despesas.
      Cada prestação criada gera um id_prestacao que é único para cada uma gerada. Dentro da tabela despesas, se eu registro, por exemplo, 4 despesas, ficarão:
       
      id_prestacao = 1, 1, 1, 1
      id_despesa = 1, 2, 3, 4
       
      -> Cada despesa tem um valor, ao qual está na tabela despesas com o nome precoDespesa.
       
      -> O que eu gostaria é de poder, na tabela prestacoes, somar o valor destas despesas e colocar na coluna "valor_total" para cada id_prestacao gerado.
       
      Qual seria a maneira mais adequada de fazer isto, e que eu poderia compreender a estrutura criada para fazer essa "filtragem"
       
      UPDATE prestacoes SET valor_total = (
          SELECT SUM(precoDespesa) FROM despesas
          ORDER BY id_prestacao
      )
       
      Na tabela despesas, tenho atualmente
      id_prestacao - id_despesa - Valor
      1 - 1 - 30
      1 - 2 - 40
      1 - 3 - 30
       
      Com essa tentativa, vamos supor que tenho a tabela prestações:
      id_prestacao - projeto - ValorTotal
      1 - Projeto A - 100 
      2 - Projeto B - 100
      3 - Projeto C - 100
       
      Ou seja, o valor total do somatório para o id_prestação está vindo como 100 (até ai tudo bem), porém não está filtrando na tabela prestações onde deve ser colocado. O 100, nesse caso, deveria ficar apenas na primeira linha, sendo os valores totais de B e C igual a 0.
    • By Rafael Castelhano
      Olá, tenho 4 tabelas com a seguinte estrutura:
      OCORRENCIAS
      Data Pasta TERCEIROS
      Pasta Acordo CUSTOS
      Pasta Valor COBRANCAS
      Pasta Valor Todas as tabelas relacioanadas pelo campo Pasta. Preciso montar uma consulta que mostre na mesma linha, para cada pasta a soma dos acordos (tabela TERCEIROS), a soma dos valores da tabela CUSTOS, e a soma dos valores da tabela COBRANCAS, o resultado seria algo como:
      --
      Data                   Pasta          Acordos              Custos       Cobrancas
      17/05/2020       55                 850                       320                 50
      --
      Meu select está desta forma
      SELECT OCORRENCIAS.Data, OCORRENCIAS.Pasta, SUM(TERCEIROS.Acordo) AS Acordos, SUM(CUSTOS.Valor) AS Custos, SUM(COBRANCAS.Valor) AS Cobrancas FROM ((OCORRENCIAS INNER JOIN TERCEIROS ON OCORRENCIAS.Pasta = TERCEIROS.Pasta) LEFT JOIN CUSTOS ON OCORRENCIAS.Pasta = CUSTOS.Pasta) LEFT JOIN COBRANCAS ON OCORRENCIAS.Pasta = COBRANCAS.Pasta GROUP BY OCORRENCIAS.Data, OCORRENCIAS.Pasta; O Problema é que ele multiplica o valor dos acordos pra cada ocorrência na tabela cobranças (por exemplo).
       
      Alguma dica pra resolver o problema?
    • By Chris Martin
      Pessoal, estou com um problema com relacionamentos no laravel. (Inclusive pode ser até falta de atenção minha), mas quebrei a cabeça demais e não consegui; Tenho as tabelas 'arquiteto' e 'cliente' e um arquiteto tem vários clientes, só que não consegui fazer o relacionamento aparecer na tabela 'cliente' tenho o campo `arquiteto_id' que referencia o 'id' da tabela 'arquitetos', só que quando fiz a relação na model Arquiteto ela não está aparecendo class Arquiteto extends Model{ protected $fillable = [...]; public function clientes() { return $this->hasMany('App\Cliente'); } }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.