Inquiridor
Soma entre resultados

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
Todas as Respostas
-
-
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
-
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
-
-
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