Jump to content
Rods2018

Retornar soma de produtos por cliente

Recommended Posts

ta aqui

 

select 
    row_number() over(order by A1_COD) as NUMBER,
    produtos.TOTAL,
    p.A1_COD,
    p.A1_NOME,
    p.A1_VEND,
    p.ULTCOMP_CLIENTE,
    p.B1_COD,
    p.B1_DESC,
    p.B2_QATU,
    p.B2_CM1,
    p.B2_VFIM1,
    p.B2_VATU1,
    p.D2_PRCVEN,
    p.D2_QUANT,
    p.ULTCOMP_PRODUTO_CLIENTE,
    p.TOTAL_MESES from SD2010,
        (select 
            B1_COD,
            count(B1_COD) over(order by B1_COD) as TOTAL 
            from 
                SB1010 
            group by 
                B1_COD) as produtos,
            (select 
                A1_COD,
                A1_NOME,
                A1_VEND,
                A1_ULTCOM as ULTCOMP_CLIENTE,
                B1_COD,
                B1_DESC,
                B2_QATU,
                B2_CM1,
                B2_VFIM1,
                B2_VATU1,
                D2_PRCVEN,
                D2_QUANT,
                max(D2_EMISSAO) as ULTCOMP_PRODUTO_CLIENTE,
                datediff(mm,max(D2_EMISSAO),getdate()) as TOTAL_MESES 
                from 
                SB1010 as SB1
                inner join SD2010 SD2 on D2_COD = B1_COD
                inner join SB2010 SB2 on B2_COD = B1_COD
                inner join SA1010 SA1 on A1_COD = D2_CLIENTE    
            where 
                B2_QATU > 0 
            and 
                (SA1.D_E_L_E_T_ <> '*' 
            and 
                SB1.D_E_L_E_T_ <> '*' 
            and 
                (SB2.D_E_L_E_T_ <> '*' 
            and 
                SD2.D_E_L_E_T_ <> '*' 
            and 
                (B1_TIPO = 'ME' 
            and 
                B1_COD not in
                    (select distinct 
                        D2_COD 
                    from 
                        SD2010      
                    where 
                        D2_FILIAL = 01 
                    and 
                        (D2_EMISSAO between dateadd(mm,-2,getdate()) and  getdate() 
                    and 
                        D2_TIPO = 'N')))))
        group by 
            A1_COD,
            A1_NOME,
            A1_VEND,
            A1_ULTCOM,
            B1_COD,
            B1_DESC,
            B2_QATU,
            B2_CM1,
            B2_VFIM1,
            B2_VATU1,
            D2_QUANT,
            D2_PRCVEN) as p
where 
    p.ULTCOMP_PRODUTO_CLIENTE between dateadd(yyyy,-8,getdate()) and dateadd(mm,-2,getdate()) 
and 
    p.B1_COD = produtos.B1_COD
group by 
    p.ULTCOMP_PRODUTO_CLIENTE,
    p.TOTAL_MESES,
    p.A1_COD,
    produtos.TOTAL,
    p.A1_NOME,
    p.A1_VEND,
    p.ULTCOMP_CLIENTE,
    p.B1_COD,
    p.B1_DESC,
    p.B2_QATU,
    p.B2_CM1,
    p.B2_VFIM1,
    p.B2_VATU1,
    p.D2_PRCVEN,
    p.D2_QUANT
order by 3,7 desc;

Share this post


Link to post
Share on other sites

sim é só trazer de uma tabela os dois campos mas so to com um problema que por causa do group by ou quando faço uma subquery pra retoranar estes valores os valores do count se alteram...

Share this post


Link to post
Share on other sites

consegui chegar no resultado que queria antes mas quando coloco o campo D2_QUANT e o D2_PRCVEN os resultados do count se alteram por que esses campos retornam muitos valores distintos

 

select 
    produtos.NUMBER,
    names.A1_COD,
    names.A1_NOME,
    names.A1_VEND,
    produtos.ULTCOMP_CLIENTE,
    produtos.B1_COD,
    produtos.TOTAL_VEZES,
    produtos.B1_DESC,
    produtos.B2_QATU,
    produtos.B2_CM1,
    produtos.B2_VFIM1,
    produtos.B2_VATU1,
    produtos.ULTCOMP_PRODUTO_CLIENTE,
    produtos.TOTAL_MESES 
from
    (select 
        A1_COD,
        A1_NOME,
        A1_VEND 
    from 
        SA1010 
    group by 
        A1_COD,
        A1_NOME,
        A1_VEND) as names,
        (select 
            row_number() over(order by A1_COD) as NUMBER,
            A1_COD,
            A1_ULTCOM as ULTCOMP_CLIENTE,
            B1_COD,
            B1_DESC,
            B2_QATU,
            B2_CM1,
            B2_VFIM1,
            B2_VATU1,
            count(B1_COD) as TOTAL_VEZES,
            max(D2_EMISSAO) as ULTCOMP_PRODUTO_CLIENTE,
            datediff(mm,max(D2_EMISSAO),getdate()) as TOTAL_MESES  
        from 
            SB1010 SB1
            inner join SD2010 SD2 on D2_COD = B1_COD
            inner join SB2010 SB2 on B2_COD = B1_COD
            inner join SA1010 SA1 on A1_COD = D2_CLIENTE
        where 
            B2_QATU > 0 
        and 
            (D2_EMISSAO between dateadd(yyyy,-8,getdate()) and dateadd(mm,-2,getdate()) 
        and 
            SA1.D_E_L_E_T_ <> '*' 
        and     
            (SB1.D_E_L_E_T_ <> '*' 
        and 
            SB2.D_E_L_E_T_ <> '*' 
        and 
            (SD2.D_E_L_E_T_ <> '*' 
        and 
            B1_TIPO = 'ME' 
        and 
            (B1_COD not in(
                        select 
                            distinct D2_COD from SD2010      
                        where 
                            D2_FILIAL = 01 
                        and 
                            (D2_EMISSAO between dateadd(mm,-2,getdate()) and  getdate() 
                        and 
                            D2_TIPO = 'N'))))))
        group by 
            A1_COD,
            A1_ULTCOM,
            B1_COD,
            B1_DESC,
            B2_QATU,
            B2_CM1,
            B2_VFIM1,
            B2_VATU1) as produtos
where 
    names.A1_COD = produtos.A1_COD
order by 2 desc

 

esta query retorna isto...

image.thumb.png.cf15c924f03c989c965599d1846d24c0.png

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 alanbr00
      Olá,
       
      estou tendo dificuldade na instalação, nunca vi esse erro. Estou pensando seriamente em formatar.
       
      Esse é o log.
       
       


    • By Antonio Barbosa
      Saudações colegas,
      Sou novo aqui na comunidad e estou com um grave problema, mas que penso ser muito simples.
       
      Normalmente sempre trabalhei com MySQL, nos meus projectos em php sempre trabalhei e tudo funciona perfeitamente, porém, estou numa empresa em que o SGBD é SQL SERVER  e tenho enfrentado alguns problemas, consigo fazer quase tudo que fazia quando o SGBD era MySQL, mas conforme o projecto na empresa vai crescendo, cresce também  a dificuldade de implementar as minha ideias usando o SQL SERVER, cá vai o problema:
       
      Tenho uma tela de Login em que o mesmo faz a requisição no Banco de Dados SQL SERVER, ele funciona 75%, caso eu coloque o Username Errado, ele trás a mensagem Dados Errados, caso eu erre a Senha, ele apresenta a mensagem de Senha Incorrecta, até aqui tudo bem, mas se eu colocar todos os dados correctos, ele não me apresenta nenhuma mensagem e não me renderiza para a página de destino.
       
      Estou a trabalhar com MVC, abaixo segue-se o código.
       
      Controller
       
      function entrar(){
              $data = array();
              $data['username'] = $_POST['nome_utilizador'];
              $data['password'] = sha1($_POST['senha']);
       
              if(!is_null($this->model->verificausername($data))){
                  echo 2;
              }
              else if(!is_null($a = $this->model->verificasenha($data))){
                  
                  echo 3;
              }    
              else if (!is_null($this->model->entrar($data))):
              echo 1;

          endif;
      }
       
      Model
       
      public function entrar($data){
       $sth =  $this->bd->prepare("SELECT *  FROM tKxUsUtilizador WHERE UtCodigo = :username AND UtSenha = :password");
       $sth->execute(array(
          ':username' => $data['username'],
          ':password' => $data['password']
      ));
       $data = $sth->fetch();
       $count = $sth->rowCount();
       if($count > 0):
                  //login
          Session::init();
          Session::set('UtCodigo', $data['UtCodigo']);
            Session::set('UtSenha', sha1($data['UtSenha']));
          Session::set('loggedIn', true);
          return 1;
      else:
          return null;
      endif;
      }
       
      Preciso muito dessa ajuda,
       
      Obrigado.
    • By Beatriz Burti
      Olá pessoal
       
      Preciso da ajuda de vocês, atualmente tenho uma consulta que está retornando as datas, nomes e quantidade de erros, gostaria de fazer um pivot para que a data fique como coluna e somar a quantidade de erros. 
       
      Poderiam me ajudar?
       
       
       
      SELECT
        CAST(C.DataPalitagem AS DATE) AS Data,
        C.Id,
        R.Id,
        R.Nome,
        COUNT(DISTINCT CASE WHEN SPC.IdStatus = 4 THEN REL.IdCaptura ELSE NULL END) AS Erros
       FROM
        Caso C (NOLOCK)
        INNER JOIN StatusProcessosCaso SPC (NOLOCK) ON C.Id = SPC.IdCaso
        INNER JOIN Relacionamento REL (NOLOCK) ON SPC.IdCaso = REL.IdCaso AND SPC.IdRobo = REL.IdRobo
        INNER JOIN Robo R (NOLOCK) ON SPC.IdRobo = R.ID
        INNER JOIN StatusProcesso S ON SPC.IdStatus = S.Id
        LEFT  JOIN TipoRobo TR ON R.IdTipoRobo = TR.Id
        LEFT  JOIN CasoCaptura CC (NOLOCK) ON C.Id = CC.IdCaso AND REL.IdCaptura = CC.IdCaptura AND CC.Excluido = 0
       WHERE
        C.Id > 370
        AND
        C.IdStatusCaso >= 2
        AND
        C.DataPalitagem >= CAST(GETDATE()-15 AS DATE)
        AND
        SPC.IdRobo NOT IN (4)
       GROUP BY
        CAST(C.Data AS DATE),
        C.Id,
        R.Id,
        R.Nome
        ORDER BY 
        C.Id,
        R.Id,
        R.Nome
       
    • By will_jdc
      Boa Tarde a todos, 
      Tenho um programa Windows desktop que utiliza o SQL SERVER como fonte de dados, os usuários iniciam o programa que se conecta ao SQL Server. 
      Após o programa fazer o Login no sql server, o usuário insere a senha do sistema para acessar as informações na base de dados, porém quando ele coloca a senha do sistema, o programa fica processando e acaba que não respondendo, como faço para verificar no SQL Server o que esta impedindo o acesso as informações ?
    • By leardini
      Boa noite.
       
      Tenho uma consulta feita em PHP que mostra em uma table o resultado, e preciso que essa consulta o Valor do Campo "ID"  passe para uma Variável para que eu possa usar em outra consulta.
       
      Não consegui muita informação para o tipo de conexão que estou usando SQL Server e não My SQL, e é uns de meus primeiros códigos.
       
      Desde já agradeço a atenção!
       
      $rank = odbc_exec($connection, $verifica); if($pg == 1 or $pg == 0){ $i = 1; }elseif($pg > 1){ $i = $ini+1; } while($dados = odbc_fetch_array($rank)) { $id=$i+1; // AQUI OCORRE O PROBLEMA $idmomb = .$dados['id']; echo ($i % 2) ? "<tr>" : "<tr>"; echo '<td><center>'.$dados['ID'].'</center></td>'; echo '<td><center>'.$dados['MonsterName'].'</center></td>'; echo '<td><center>'.$dados['PublicDrop'].'</center></td>'; echo '<td><center>'.$dados['Quantity'].'</center></td>'; echo '</tr>'; $i++; } echo '</table>';  
×

Important Information

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