none
Soma entre resultados RRS feed

  • Discussão Geral

  • Boa Tarde

    Pessoal tenho essa query

    SET ARITHABORT OFF
    SET ANSI_WARNINGS OFF
         SELECT
                CONVERT(VARCHAR,CAST(SE1010.E1_EMISSAO AS DATETIME),103) AS                  [Emissão.NF]
               ,SE1010.E1_NUM                                                                [Nota Fiscal]
               ,Convert(Numeric(10,2),SE1010.E1_VLCRUZ)                                      [Total Titulo]
               ,RTRIM(SD2010.D2_COD)                                                  [Cod.Produto]
               ,RTRIM(B1_DESC)                                                        [Desc.Produto] 
               ,SE1010.E1_VEND1                                                       [Cod.Vendedor]
               ,RTRIM(SA3010.A3_NOME)                                                 [Nome Vendedor] 
               ,SE1010.E1_CLIENTE                                                     [Cod.Cliente]
               ,SE1010.E1_LOJA                                                        [Loja]
               ,RTRIM(SE1010.E1_NOMCLI)                                               [Cliente]                      
               ,SE1010.E1_PARCELA                                                            [Parcela]
               ,Result =(SELECT COUNT(E1_PARCELA)
                        FROM SE1010
                        WHERE 
                        SD2010.D2_FILIAL + SD2010.D2_DOC + SD2010.D2_SERIE = SE1010.E1_FILIAL + SE1010.E1_NUM + SE1010.E1_SERIE)
               ,CONVERT(VARCHAR,CAST(SE1010.E1_VENCORI AS DATETIME),103) AS                  [Vencimento.NF]
               ,CONVERT(VARCHAR,CAST(E1_BAIXA AS DATETIME),103) AS                           [Baixa Titulo]
               ,[Descrição Status]=
                   CASE 
                      WHEN SE1010.E1_STATUS='A'  THEN 'Titulo Aberto'
                      WHEN SE1010.E1_STATUS='B'  THEN 'Titulo Baixado'
                    END
               ,Convert(Numeric(10,3),(SD2010.D2_QUANT/B1_CONV2) )                           [Qtde NF]           
               ,Convert(Numeric(10,2),SD2010.D2_PRUNIT)                                      [Pr.Unit Nota]
               ,Convert(Numeric(10,2),SD2010.D2_PRUNIT*B1_CONV2)                                       [Pr.Conver.]           
               ,Convert(Numeric(10,2),SD2010.D2_VALFRE)                                      [Val.Frete]
                          FROM 
                           SE1010  ,SD2010  ,SB1010 ,SA3010 ,SC6010
                           WHERE SE1010.E1_VEND1='000294'
                                 AND E1_EMISSAO>='20150101'
                                 AND SD2010.D2_FILIAL + SD2010.D2_DOC + SD2010.D2_SERIE = SE1010.E1_FILIAL + SE1010.E1_NUM + SE1010.E1_SERIE
                                 AND SD2010.D2_FILIAL + SD2010.D2_DOC + SD2010.D2_SERIE + SD2010.D2_COD + SD2010.D2_PEDIDO
                                   = SC6010.C6_FILIAL + SC6010.C6_NOTA + SC6010.C6_SERIE + SC6010.C6_PRODUTO + SC6010.C6_NUM
                                 AND SD2010.D2_COD = SB1010.B1_COD
                                 AND SA3010.A3_COD = SE1010.E1_VEND1 
              ORDER BY
              E1_EMISSAO
              

    Preciso do seguinte;

    1- qtde nf / Result

    2- Val.Ferte / Result

    3- Val.Ipi / Result

    Alguém teria uma ideia como fazer?

    • Tipo Alterado Marcos SJ segunda-feira, 9 de maio de 2016 14:15 How to
    sexta-feira, 6 de maio de 2016 19:33

Todas as Respostas

  • Deleted
    sábado, 7 de maio de 2016 23:16
  • Sem entrar muito em detalhe, eu diria que converter em Stored Procedure ajudaria, algo assim, o resto pode extrapolar:

    CREATE PROCEDURE [dbo].[ProcedureName]
     @Result int out
    AS
    BEGIN


    SET @Result = (SELECT COUNT(E1_PARCELA)
                         FROM SE1010
                         WHERE
                         SD2010.D2_FILIAL + SD2010.D2_DOC + SD2010.D2_SERIE = SE1010.E1_FILIAL + SE1010.E1_NUM + SE1010.E1_SERIE
          )

    SELECT --...
     qtdenf / @Result AS qtdenfR,
     Val.Ferte / @Result AS Val.FerteR,
     Val.Ipi / @Result AS Val.IpiR,
     --...

    END

    domingo, 8 de maio de 2016 09:34
  • Bom dia Marco, tudo certo?

    Segue abaixo uma sugestão

    WITH CTE AS (
    SELECT D_E_L_E_T_+E1_FILIAL+E1_NUM+E1_SERIE AS CHAVE, COUNT(E1_PARCELA) AS RESULT
    FROM SE1010
    WHERE D_E_L_E_T_ <> '*' 
    )
    
    
     SELECT
                CONVERT(VARCHAR,CAST(E1.E1_EMISSAO AS DATETIME),103) AS                  [Emissão.NF]
               ,E1.E1_NUM                                                                [Nota Fiscal]
               ,Convert(Numeric(10,2),E1.E1_VLCRUZ)                                      [Total Titulo]
               ,RTRIM(D2.D2_COD)                                                  [Cod.Produto]
               ,RTRIM(B1_DESC)                                                        [Desc.Produto] 
               ,E1.E1_VEND1                                                       [Cod.Vendedor]
               ,RTRIM(A3.A3_NOME)                                                 [Nome Vendedor] 
               ,E1.E1_CLIENTE                                                     [Cod.Cliente]
               ,E1.E1_LOJA                                                        [Loja]
               ,RTRIM(E1.E1_NOMCLI)                                               [Cliente]                      
               ,E1.E1_PARCELA                                                            [Parcela]
               ,RESULT [Result]
               ,CONVERT(VARCHAR,CAST(E1.E1_VENCORI AS DATETIME),103) AS                  [Vencimento.NF]
               ,CONVERT(VARCHAR,CAST(E1_BAIXA AS DATETIME),103) AS                           [Baixa Titulo]
               ,[Descrição Status]=
                   CASE 
                      WHEN E1.E1_STATUS='A'  THEN 'Titulo Aberto'
                      WHEN E1.E1_STATUS='B'  THEN 'Titulo Baixado'
                    END
               ,Convert(Numeric(10,3),(D2.D2_QUANT/B1_CONV2) )                           [Qtde NF]           
               ,Convert(Numeric(10,2),D2.D2_PRUNIT)                                      [Pr.Unit Nota]
               ,Convert(Numeric(10,2),D2.D2_PRUNIT*B1_CONV2)                                       [Pr.Conver.]           
               ,Convert(Numeric(10,2),D2.D2_VALFRE)                                      [Val.Frete]
    		   ,Convert(Numeric(10,3),(D2.D2_QUANT/B1_CONV2)/RESULT )                           [Exp1]   
    		   ,Convert(Numeric(10,3),(D2.D2_VALFRE/B1_CONV2)/RESULT )                           [Exp2]   
    		   ,Convert(Numeric(10,3),(D2.D2_VALIPI/B1_CONV2)/RESULT )                           [Exp3]   
                          FROM 
                           SE1010 E1 
    					   INNER JOIN SD2010  D2
    					   ON D2.D_E_L_E_T_+D2.D2_FILIAL + D2.D2_DOC + D2.D2_SERIE = E1.D_E_L_E_T_+E1.E1_FILIAL + E1.E1_NUM + E1.E1_SERIE
    					   INNER JOIN SB1010 B1
    					   ON D2.D_E_L_E_T_+D2.D2_COD = B1.D_E_L_E_T_+B1.B1_COD
    					   INNER JOIN SA3010 A3
    					   ON A3.D_E_L_E_T_+A3.A3_COD = E1.D_E_L_E_T_+E1.E1_VEND1 
    					   INNER JOIN SC6010 C6
    					   ON D2.D_E_L_E_T_+D2.D2_FILIAL + D2.D2_DOC + D2.D2_SERIE + D2.D2_COD + D2.D2_PEDIDO + D2.D2_ITEMPV
                                   = C6.D_E_L_E_T_+C6.C6_FILIAL + C6.C6_NOTA + C6.C6_SERIE + C6.C6_PRODUTO + C6.C6_NUM + C6.C6_ITEM
    					   INNER JOIN CTE
    					   ON CTE.CHAVE = E1.D_E_L_E_T_+E1.E1_FILIAL+E1.E1_NUM+E1.E1_SERIE
                           WHERE E1.E1_VEND1='000294'
                                 AND E1_EMISSAO>='20150101'
              ORDER BY E1_EMISSAO

    Adicionei os campos D_E_L_E_T nas chaves, pois caso contrário você estará pegando títulos deletados.

    Adicionei o item do PV no join entre a D2 e a C6 para que evite gerar duplicidade em casos de um pedido ter mais de 1 linha com o mesmo produto.

    Qualquer dúvida estou à disposição.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    segunda-feira, 9 de maio de 2016 10:59
  • Deleted
    segunda-feira, 9 de maio de 2016 11:57
  • Bom dia José!

    Sim, realmente faltou o group by nesse trecho.

    Não cheguei a testar o script, mas valeu pela observação!! =D

    Segue abaixo com a correção:

    WITH CTE AS (
    SELECT D_E_L_E_T_+E1_FILIAL+E1_NUM+E1_SERIE AS CHAVE, COUNT(E1_PARCELA) AS RESULT
    FROM SE1010
    WHERE D_E_L_E_T_ <> '*' 
    GROUP BY D_E_L_E_T_+E1_FILIAL+E1_NUM+E1_SERIE
    )
    
    
     SELECT
                CONVERT(VARCHAR,CAST(E1.E1_EMISSAO AS DATETIME),103) AS                  [Emissão.NF]
               ,E1.E1_NUM                                                                [Nota Fiscal]
               ,Convert(Numeric(10,2),E1.E1_VLCRUZ)                                      [Total Titulo]
               ,RTRIM(D2.D2_COD)                                                  [Cod.Produto]
               ,RTRIM(B1_DESC)                                                        [Desc.Produto] 
               ,E1.E1_VEND1                                                       [Cod.Vendedor]
               ,RTRIM(A3.A3_NOME)                                                 [Nome Vendedor] 
               ,E1.E1_CLIENTE                                                     [Cod.Cliente]
               ,E1.E1_LOJA                                                        [Loja]
               ,RTRIM(E1.E1_NOMCLI)                                               [Cliente]                      
               ,E1.E1_PARCELA                                                            [Parcela]
               ,RESULT [Result]
               ,CONVERT(VARCHAR,CAST(E1.E1_VENCORI AS DATETIME),103) AS                  [Vencimento.NF]
               ,CONVERT(VARCHAR,CAST(E1_BAIXA AS DATETIME),103) AS                           [Baixa Titulo]
               ,[Descrição Status]=
                   CASE 
                      WHEN E1.E1_STATUS='A'  THEN 'Titulo Aberto'
                      WHEN E1.E1_STATUS='B'  THEN 'Titulo Baixado'
                    END
               ,Convert(Numeric(10,3),(D2.D2_QUANT/B1_CONV2) )                           [Qtde NF]           
               ,Convert(Numeric(10,2),D2.D2_PRUNIT)                                      [Pr.Unit Nota]
               ,Convert(Numeric(10,2),D2.D2_PRUNIT*B1_CONV2)                                       [Pr.Conver.]           
               ,Convert(Numeric(10,2),D2.D2_VALFRE)                                      [Val.Frete]
    		   ,Convert(Numeric(10,3),(D2.D2_QUANT/B1_CONV2)/RESULT )                           [Exp1]   
    		   ,Convert(Numeric(10,3),(D2.D2_VALFRE/B1_CONV2)/RESULT )                           [Exp2]   
    		   ,Convert(Numeric(10,3),(D2.D2_VALIPI/B1_CONV2)/RESULT )                           [Exp3]   
                          FROM 
                           SE1010 E1 
    					   INNER JOIN SD2010  D2
    					   ON D2.D_E_L_E_T_+D2.D2_FILIAL + D2.D2_DOC + D2.D2_SERIE = E1.D_E_L_E_T_+E1.E1_FILIAL + E1.E1_NUM + E1.E1_SERIE
    					   INNER JOIN SB1010 B1
    					   ON D2.D_E_L_E_T_+D2.D2_COD = B1.D_E_L_E_T_+B1.B1_COD
    					   INNER JOIN SA3010 A3
    					   ON A3.D_E_L_E_T_+A3.A3_COD = E1.D_E_L_E_T_+E1.E1_VEND1 
    					   INNER JOIN SC6010 C6
    					   ON D2.D_E_L_E_T_+D2.D2_FILIAL + D2.D2_DOC + D2.D2_SERIE + D2.D2_COD + D2.D2_PEDIDO + D2.D2_ITEMPV
                                   = C6.D_E_L_E_T_+C6.C6_FILIAL + C6.C6_NOTA + C6.C6_SERIE + C6.C6_PRODUTO + C6.C6_NUM + C6.C6_ITEM
    					   INNER JOIN CTE
    					   ON CTE.CHAVE = E1.D_E_L_E_T_+E1.E1_FILIAL+E1.E1_NUM+E1.E1_SERIE
                           WHERE E1.E1_VEND1='000294'
                                 AND E1_EMISSAO>='20150101'
              ORDER BY E1_EMISSAO

    Obrigado!!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    terça-feira, 10 de maio de 2016 13:01