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 TaisStream
      Como configurar essa query com inner join, no arquivo .xml?
      Me ajudem pf eu comecei mas estou perdida,  pesquisei já vi algo de /root... mas minha query esta diferente, nao sei se falta algo
       
       
      QUERY ATUAL:
      set mapreduce.job.queuename=low_relatorios; 
      set mapreduce.job.max.split.locations=100;
      SELECT a.num_msisdn,
             a.max_date
      FROM fact.dw_f_rcrg_gems_rate_subsc t
      INNER JOIN
        (SELECT num_msisdn,
                MAX(dat_operacao) AS max_date
         FROM fact.dw_f_rcrg_gems_rate_subsc
         WHERE (ref_date)>=$startdate
           AND ref_date<=$finaldate
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
      AND a.max_date = t.dat_operacao
      WHERE ref_date>=$startdate
      AND ref_date<=$finaldate;
       
      QUERY CONFIGURANDO NO XML: 
       
          <value><![CDATA[[
      INSERT
              overwrite TABLE fact.dw_f_rcrg_gems_rate_subsc t 
              (
                      a.num_msisdn,
                      a.max_date
              )
      (SELECT
          INNER JOIN
      SELECT      
              MAX(dat_operacao) AS max_date;
      FROM fact.dw_f_rcrg_gems_rate_subsc) a
         WHERE (ref_date)>='$startdate'
           AND ref_date<=$'finaldate'
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
                  AND a.max_date = t.dat_operacao
      WHERE ref_date>='$startdate'
      AND ref_date<=$finaldate;]]>
      </value>
       
       
      Poderiam me ajudar por favor, sou estagiario na area e ainda estou aprendendo.
    • By Richard.Ribeiro
      Boa tarde a todos, Uma ajuda Por favor, alguém pode me explicar porque sempre que eu digito no" input name=vsat" e clico em buscar a DIV do " select id=rightValues" SOME
      alguem poderia ajudar? o erro está no  PHP ou JS
      desde já agradeço a atenção.
      <style media="screen">
      SELECT, INPUT[type="text"] {
        width:500px;
        box-sizing: border-box;
      }
      SELECT, INPUT[type="button"] {
        font-size: 20px;
      }
      SECTION {
        padding: 8px;
        background-color: #f0f0f0;
        overflow: auto;
      }
      SECTION > DIV {
        float: left;
        padding: 30px;
      }
      SECTION > DIV + DIV {
        width: 200px;
        text-align: center;
      }
      </style>
      <section class="container">
      <form  method="post">
        <?php
        if (isset($_POST['buscar'])) {
            $id_gmm = $_POST['gmm'];
          }elseif (isset($_POST['buscar2'])){
                $vsat = $_POST['vsat'];
            }
            ?>
      <h2><i class="fa fa-link"></i> Vincular Componentes a VSAT</h2>
      <h4><i class="fa fa-arrow-down"></i> Itens da GMM</h4>
          <div>
            <input type="text" name="gmm"  placeholder="Digite o N° da GMM">
            <input type="submit" name="buscar" value="buscar"><br>
              <select id="leftValues" size="5" multiple>
                <?php
                $consultaGmm = ConexaoBD::conectar()->prepare("SELECT tipo_material_id FROM itens_fornecidos WHERE gmm_id = $id_gmm ");
                $consultaGmm->execute();
                $consultaGmm = $consultaGmm->fetchAll();
                foreach ($consultaGmm as $key => $value) {
               ?>
              <option value="<?php echo  $value['tipo_material_id'];?>">
               <?php echo $value['tipo_material_id']; ?>
               </option>
            <?php }?>
            </select>
          </div>
          <div>
              <input type="button" id="btnLeft" value="&lt;&lt;" />
              <br>  <br>
              <input type="button" id="btnRight" value="&gt;&gt;" />
          </div>
          <div>
            <label for="">VSAT</label>
            <input type="text" name="vsat"  placeholder="Digite o ID/IDE da VSAT">
            <input type="submit" name="buscar2" value="buscar"><br>
              <select id="rightValues" size="4" multiple>
                <?php
                $consultaVsat = ConexaoBD::conectar()->prepare("SELECT estoque_material_id FROM componentes_instalados WHERE estoque_material_id = $vsat ");
                $consultaVsat->execute();
                $consultaVsat = $consultaVsat->fetchAll();
                foreach ($consultaVsat as $key => $valueVsat) {
               ?>
               <option value="<?php echo $valueVsat['estoque_material_id'];?>">
                 <?php echo $valueVsat['estoque_material_id']; ?>
               </option>
             <?php } ?>
              </select>
          </div>
      </form>
      </section>
      <script  src="<?php echo INCLUDE_PATH_PAINEL ?>js/jquery-3.4.1.min.js"></script>
      <script src="<?php echo INCLUDE_PATH_PAINEL ?>js/main.js"></script>
      <script type="text/javascript">
      $("#btnLeft").click(function () {
          var selectedItem = $("#rightValues option:selected");
          $("#leftValues").append(selectedItem);
      });
      $("#btnRight").click(function () {
          var selectedItem = $("#leftValues option:selected");
          $("#rightValues").append(selectedItem);
      });
       
      </script>
      <?php die(); ?>
       
       
    • By Rui PG
      Boa tarde, Pessoal"
       
      Sou iniciante em SQL, em uma tabela do nosso BD tempos um campo que possui o registro com as informações do paciente concatenado com uma serie de valores que não precisamos.
      Como eu faço, para montar uma select para extrair desse registro apenas o que está entre aspas?
       
      O meu registro está assim:
      a:28:{i:18;s:13:"Sérgio silva";i:19;s:11:"1199900001";i:20;s:0:"n/i";i:21;s:0:"n/i";i:23;s:15:"Amil One Health";i:24;s:0:"n/i";i:27;s:0:"n/i";i:31;s:1:"2";i:32;s:0:"n/i";i:33;s:1:"2";i:34;s:0:;}
       
      Eu preciso dele assim:
      "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";
       
      Observação, esses monte de valores a:28: ...etc... eles mudam, não são valores fixos, se fossem até usaria o replace, mas são vários valores.
       
      Depois que eu chegar nessa mineração: "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";
      Como eu faço para alocar cada valor em campo campo qualquer, pode ser uma tabela temporária, tipo assim:
       
      |nome           |campo 1        |Campo 2 |Campo 3 |Campo 4               |Campo  5 | .....
      |Sérgio silva|1199900001|n/i              |n/i              |Amil One Health|n/i               |n/i|2|n/i|2| .....
       
      Muito obrigado amigos
       
       
       
       
       
       
    • By TheRonaldoStar
      Olá. eu gostaria de tirar uma dúvida que já faz exatamente 1 dia que eu estou fazendo pesquisas e nada.
      Minha dúvida é a seguinte, Estou fazendo um aplicativo de mensagem por browser se e que pode se chamar assim.
      Tipo eu tenho o loby de mensagem semelhante ao Whatsapp e quando a pessoa clica em conversas eu faço a consulta via ajax
      Nesta consulta eu só informo o meu id ou seja o id do usuário logado. e na pagina php eu faço a seguinte consulta no banco de dados:
      Procurar por todas as mensagens da tabela: privado, Nesta consulta me retorna todas as mensagens cujo meu id existe como na coluna: Para, com o status da mensagem valor 0
      Ou seja 0= Disponível e 1 seria deletada. este e o código usado:
       
      $sql = $db->prepare("SELECT * FROM privado WHERE Para = '$ID_user' AND Status = '0' ORDER BY id DESC");
      $sql->execute();
       
      Continuando;
      Após o fazer esta consulta coloquei para listar tudo com o while, colocando todos os id dos usuários em uma variável e dentro deste mesmo while eu faço
      Outra consulta por os usuários informado pela variável id da pessoa que mandou. e isso ocorre com sucesso, ou seja eu consigo fazer quase tudo que eu quero.
      Procurei pelas mensagem, pesquisei por estes usuários mostro: Nome, foto, e a mensagem; Este e o código usado:
       
      while($dados = $sql->fetch(PDO::FETCH_OBJ)){
              $ID_De = ($dados -> De);
              $U_mensagem = ($dados -> Texto);
              $sql1 = $db->prepare("SELECT * FROM usuarios WHERE id = '$ID_De' ORDER BY id DESC");
              $sql1->execute();
              
              while($dados1 = $sql1->fetch(PDO::FETCH_OBJ)){
                  $Foto = ($dados1 -> foto == "") ? "defaut.png" : $dados1 -> foto;
                  $Nome = ($dados1 -> nome);
                  echo "Nome: ".$Nome."<br>Foto: ".$Foto."<br>Mensagem: ".$U_mensagem."<br><br>";
              }
          }
       
      No final fica tudo assim:
       
      Nome: Moderador
      Foto: user_3.png
      Mensagem: Mensagem do moderador

      Nome: Ronaldo
      Foto: user_1.png
      Mensagem: Como vai você?

      Nome: Ronaldo
      Foto: user_1.png
      Mensagem: Olá
       
      Mas no final das contas eu gostaria de saber somente uma coisa para que meu projeto funcione como quero:
      Eu quero que a listagem da ultima mensagem de cada usuário não todas as mensagem daquele usuário, ou seja somente da ultima mensagem de cada um usuário
       
      "Tabela nome: usuários
      Colunas: [ id, De, Para, Texto, Status ]" 
       
      Este e o código completo da pagina:
       
      <?php
          $Hostname = "localhost";
          $Database = "servidor_app";
          $Charset = "utf8";
          $Username = "root";
          $Password = "";
          $db = new PDO('mysql:host='.$Hostname.';dbname='.$Database.';charset='.$Charset.'', $Username, $Password);
          $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          
          $URL_ATUAL= "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
          parse_str(parse_url($URL_ATUAL, PHP_URL_QUERY), $vamos_ver);
          $ID_user = $vamos_ver['id'];
          $sql = $db->prepare("SELECT * FROM privado WHERE Para = '$ID_user' AND Status = '0' ORDER BY id DESC");
          $sql->execute();
          while($dados = $sql->fetch(PDO::FETCH_OBJ)){
              $ID_De = ($dados -> De);
              $U_mensagem = ($dados -> Texto);
              $sql1 = $db->prepare("SELECT * FROM usuarios WHERE id = '$ID_De' ORDER BY id DESC");
              $sql1->execute();
              while($dados1 = $sql1->fetch(PDO::FETCH_OBJ)){
                  $Foto = ($dados1 -> foto == "") ? "defaut.png" : $dados1 -> foto;
                  $Nome = ($dados1 -> nome);
                  echo "Nome: ".$Nome."<br>Foto: ".$Foto."<br>Mensagem: ".$U_mensagem."<br><br>";
              }
          }
      ?>
       
      Pro favor preciso de ajuda urgente.
      Atenciosamente,
      ~Ronaldo
    • By newallan
      Boa tarde,
       
      Pessoal preciso calcular quantas horas/minutos  o empregado descansou  em uma determinada jornada, por exemplo, ele chegou as 10:42:10 e depois saiu 11:02:10 total de 20 min, com o conhecimento que tenho só consigo subtrair chegada - partida na mesma linha, só que não da certo porque a informação e cruzada, e possível fazer em sql?
       

×

Important Information

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