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 johnklo
      COM BASE NA TABELA HR DO ORACLE
      Preciso criar uma sub-rotina (procedure) que imprima na tela o número de funcionários (employees) agrupados por departamentos (department_id). Deve-se ordenar a saída em ordem decrescente pela quantidade de departamentos. Pode-se utilizar qualquer forma de cursor para imprimir o resultado.
    • By c3s1nha
      Boa tarde,
       
      Preciso restaurar a estrutura de um banco de dados (tabelas,views,procedures.. etc) em outro banco de dados que esta vazio (nao tem tabela nenhuma, banco novo), utilizo o sql server. Consigo fazer utilizando o SSMS ?
       
      Para entender melhor estou enviando uma imagem.
       
       
      O banco com todas tabelas,viwes,procedures, registros, etc..  é o Guara_ que esta no servidor   .\SQLEXPRESS   quero fazer uma copia identica dele no banco Nutri no servidor sdb.hsi.
       
      Desde ja agradeço. 

    • By alanbr00
      Olá,
       
      estou tendo dificuldade na instalação, nunca vi esse erro. Estou pensando seriamente em formatar.
       
      Esse é o log.
       
       


    • By PierreMoraes
      Olá a todos sou novo no grupo porem ja peguei muita solução aqui no forum.
      Gostaria da ajude devocês pois estou com uma dificuldade em meu site. Tenho um painel ADMININSTRATIVO em meu site e tenho aceso a visão de algumas coisas dos usuarios como quantidade de logins, nivel de acesso, nome, sobrenome, email e outras coisas refetente ao conteúdo do site.
      Ai vem minha dúvida preciso pegar o IP dos usuarios no meu banco de dados e sim ja tenho essa função, porem ele fica misturado com de todos outros, montei o mesmo para visualização dos ultimos 8 aceessos com data assim:
       
      <tbody> <?php $qnt_result_pg = 8; $stmtt=$bdd->prepare("SELECT * FROM vanguard_singin WHERE name_user=? ORDER BY id desc LIMIT $qnt_result_pg"); $stmtt->execute(array($_SESSION['vg_usern'])); while($rowip=$stmtt->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?php echo $rowip['ip']; ?></td> <?php $source = $rowip['dt_log']; $date = new DateTime($source); ?> <td><?php echo $date->format('d/m/Y G:y'); ?></td> </tr> <?php } ?> </tbody> e funciona perfeito porem preciso implementar essa função no meu painel, lembrando que esse código acima ele serve apenas para o proprio usuario visualizar.
       
      ESSE É DO PAINEL
      <tbody> <?php $query = "SELECT * FROM vanguard_users"; $stmt = $bdd->prepare( $query ); $stmt->execute(); while($row_usuario=$stmt->fetch(PDO::FETCH_ASSOC)) { $result_items2 = $bdd->query('SELECT count(1) FROM vanguard_items WHERE author="' .$row_usuario['usern']. '"'); $row_items2 = $result_items2->fetch(); $total_items2 = $row_items2[0]; $result_follow = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_following = {$row_usuario['id']}"); $row_follow = $result_follow->fetch(); $total_follow = $row_follow[0]; $result_follower = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_follower = {$row_usuario['id']}"); $row_follower = $result_follower->fetch(); $total_follower = $row_follower[0]; extract($row_usuario); $name_user = $row_usuario['usern']; $result_ip = $bdd->prepare('SELECT COUNT(ip) FROM vanguard_singin WHERE name_user = "' .$row_usuario['usern']. '"'); $result_ip->execute(array($name_user)); $result_ip = $result_ip->fetchColumn(); ?> <tr class="odd gradeX"> <td width="1%" class="f-s-600 text-white-transparent-8"> <?php echo $row_usuario['id']; ?> </td><!-- ID --> <td width="1%" class="with-img"> <img src="<?= $url; ?>static/img/avatars/<?php echo $row_usuario['avatar']; ?>" class="img-rounded height-30" /> </td><!-- PHOTO --> <td> <?php echo $row_usuario['usern']; ?> </td><!-- USERNAME --> <td> <?php echo $row_usuario['lname']; ?> </td><!-- NOME --> <td> <?php echo $row_usuario['fname']; ?> </td><!-- SOBRENOME --> <td> <?php if ($row_usuario['role'] == "1") { echo '<h5 class="text1">'.$lang['CLASS_01'].'<h5>'; } elseif ($row_usuario['role'] == "2") { echo '<h5 class="text2">'.$lang['CLASS_02'].'<h5>'; } elseif ($row_usuario['role'] == "3") { echo '<h5 class="text3">'.$lang['CLASS_03'].'<h5>'; } elseif ($row_usuario['role'] == "4") { echo '<h5 class="text4">'.$lang['CLASS_04'].'<h5>'; } elseif ($row_usuario['role'] == "5") { echo '<h5 class="text5">'.$lang['CLASS_05'].'<h5>'; } elseif ($row_usuario['role'] == "6") { echo '<h5 class="text6">'.$lang['CLASS_06'].'<h5>'; } elseif ($row_usuario['role'] == "7") { echo '<h5 class="text7">'.$lang['CLASS_07'].'<h5>'; } else { echo '<h5 class="">'.$lang['CLASS_00'].'<h5>'; }; ?> </td><!-- NIVEL DE ACESSO --> <td> <?php echo $row_usuario['created']; ?> </td><!-- DATA DE CRIAÇÃO --> <td> <?php echo $row_usuario['email']; ?> </td><!-- EMAIL --> <td> <?php echo $row_usuario['quotas']; ?> </td><!-- QUOTA DE POSTS --> <td> <?php echo $row_ip['ip']; ?> </td><!-- IP --> <td> <?php if ($total_items2 == 0) { ?>0<?php } ?><?php if ($total_items2 > 0) { ?><?php echo $total_items2; ?><?php } ?> </td><!-- ITENS POSTADOS NA PAGINA DOWNS --> <td> <?php echo $total_follower; ?> </td><!-- SEGUINDO --> <td> <?php echo $total_follow; ?> </td><!-- SEGUIDOR --> <td> <?php echo $result_ip; ?> </td><!-- LOGINS TOTAL --> <td class="with-btn" nowrap> <a href="<?= $url; ?>edit_usuario/<?php echo $row_usuario['id']; ?>" class="btn btn-sm btn-primary width-60 m-r-2">Editar</a> <?php if ($row_usuario['status'] == "2") { ?> <a href="<?= $url; ?>edit_ban/<?php echo $row_usuario['id']; ?>" class="btn btn-sm btn-warning">DesBanir</a> <?php }else{ ?> <a href="<?= $url; ?>edit_ban/<?php echo $row_usuario['id']; ?>" class="btn btn-sm btn-danger">Banir</a> <?php } ?> </td><!-- OPÇÕES DE EDITAR E BANIR --> </tr> <?php } ?> </tbody> Só deixar claro aqui sei que ninguém aqui é leigo mais para adiantar e talvez não haver confusão:
       
      Esse inicio de código seria o que chama a tabela dos usuários e seus dados: 
       $query = "SELECT * FROM vanguard_users";
                                              $stmt = $bdd->prepare( $query );
                                              $stmt->execute();
                                              while($row_usuario=$stmt->fetch(PDO::FETCH_ASSOC))
                                              {
       
      Essa segunda parte é uma segunda tabela onde chama algumas informações referente á um serviço do site:
      $result_items2 = $bdd->query('SELECT count(1) FROM vanguard_items WHERE author="' .$row_usuario['usern']. '"');
                                                  $row_items2 = $result_items2->fetch();
                                                  $total_items2 = $row_items2[0];
       
      Essa terceira parte chama outra tabela e informa outros dados referente ao perfil do usuario:
      $result_follow = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_following = {$row_usuario['id']}");
                                                  $row_follow = $result_follow->fetch();
                                                  $total_follow = $row_follow[0];
       
      $result_follower = $bdd->query("SELECT count(1) FROM vanguard_follow WHERE id_follower = {$row_usuario['id']}");
                                                  $row_follower = $result_follower->fetch();
                                                  $total_follower = $row_follower[0];
       
       
      Essa quarta parte chama a quantidade de logins do usuario :
      Obs que esse é a mesma TABELA que preciso acessar para ver o IP do usuário porem ele só contabiliza os IP do mesmo usuário e soma assim dando a quantidade de logins no site.
       
      extract($row_usuario);
                                                  
                                                  $name_user = $row_usuario['usern'];
                                                  $result_ip = $bdd->prepare('SELECT COUNT(ip) FROM vanguard_singin WHERE name_user = "' .$row_usuario['usern']. '"');
                                                  $result_ip->execute(array($name_user));
                                                  $result_ip = $result_ip->fetchColumn();
       
      Preciso dessa mesma tabela visualizar os ultimos logins e me informar o IP como mostro no inicio da publicação.
      Quem puder ajudar agradeço muitissímo.
      Abraço a todos e um ótimo final de semana.
×

Important Information

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