Fórum Somar vendas e devoluções para obter a venda líquida #610694
18/05/2020
0
Como disse, estou aprendendo rsrs nível iniciante do iniciante rsrsrs
Segue abaixo o que estou tentando fazer.
SELECT Estado,
SUM(ValorTotalNota)-(SELECT SUM(ValorTotalNota) FROM NotaFiscal WHERE Operacao=81 AND StatusNFe=100) AS ''Venda Líquida''
FROM NotaFiscal
WHERE Operacao=64 AND
StatusNFe=100
GROUP BY Estado;
Na minha cabeça o primeiro SUM seria para somar todas as vendas brutas que são da operação 64 depois subtrair de outro SUM onde ele busca as devoluções na operação 81 resultando na venda víquida por estado brasileiro.
Porém tenho convicção que estou interpretando algo errado pois o resultado não bate.
Weskley Rocha
Curtir tópico
+ 0Posts
18/05/2020
Márcio Brigatto
Como disse, estou aprendendo rsrs nível iniciante do iniciante rsrsrs
Segue abaixo o que estou tentando fazer.
SELECT Estado,
SUM(ValorTotalNota)-(SELECT SUM(ValorTotalNota) FROM NotaFiscal WHERE Operacao=81 AND StatusNFe=100) AS ''Venda Líquida''
FROM NotaFiscal
WHERE Operacao=64 AND
StatusNFe=100
GROUP BY Estado;
Na minha cabeça o primeiro SUM seria para somar todas as vendas brutas que são da operação 64 depois subtrair de outro SUM onde ele busca as devoluções na operação 81 resultando na venda víquida por estado brasileiro.
Porém tenho convicção que estou interpretando algo errado pois o resultado não bate.
Gostei + 0
18/05/2020
Márcio Brigatto
Eu acho que faltou vc vincular o Estado no segundo Select.
Eu faria assim:
SELECT A.ESTADO ,
A.VALORTOTAL ,
( SELECT SUM(VALORTOTALNOTA)
FROM NOTAFISCAL
WHERE OPERACAO=81 AND
STATUSNFE=100 AND
ESTADO = A.ESTADO ) AS DEVOLUCAO
FROM
(
SELECT ESTADO,
SUM( VALORTOTALNOTA ) AS VALOTTOTAL
FROM NOTAFISCAL
WHERE OPERACAO=64 AND
STATUSNFE=100
GROUP BY ESTADO
) A
Gostei + 0
18/05/2020
Weskley Rocha
Eu acho que faltou vc vincular o Estado no segundo Select.
Eu faria assim:
SELECT A.ESTADO ,
A.VALORTOTAL ,
( SELECT SUM(VALORTOTALNOTA)
FROM NOTAFISCAL
WHERE OPERACAO=81 AND
STATUSNFE=100 AND
ESTADO = A.ESTADO ) AS DEVOLUCAO
FROM
(
SELECT ESTADO,
SUM( VALORTOTALNOTA ) AS VALORTOTAL
FROM NOTAFISCAL
WHERE OPERACAO=64 AND
STATUSNFE=100
GROUP BY ESTADO
) A
Rapais deu certo hein, agora uma dúvida no seu comando logo após o SELECT vc colocou a coluna A.VALORTOTAL, de onde ela veio já que não existe ela na tabela, eu faço ideia de onde ela veio olhando seu comando, mas isso é possível no SQL? E muito obrigado pela ajuda.
Gostei + 0
18/05/2020
Márcio Brigatto
Eu acho que faltou vc vincular o Estado no segundo Select.
Eu faria assim:
SELECT A.ESTADO ,
A.VALORTOTAL ,
( SELECT SUM(VALORTOTALNOTA)
FROM NOTAFISCAL
WHERE OPERACAO=81 AND
STATUSNFE=100 AND
ESTADO = A.ESTADO ) AS DEVOLUCAO
FROM
(
SELECT ESTADO,
SUM( VALORTOTALNOTA ) AS VALORTOTAL
FROM NOTAFISCAL
WHERE OPERACAO=64 AND
STATUSNFE=100
GROUP BY ESTADO
) A
Rapais deu certo hein, agora uma dúvida no seu comando logo após o SELECT vc colocou a coluna A.VALORTOTAL, de onde ela veio já que não existe ela na tabela, eu faço ideia de onde ela veio olhando seu comando, mas isso é possível no SQL? E muito obrigado pela ajuda.
O Select na tabela NotaFiscal eu chamei de "A" ( a última linha do comando: ") A" ) para fazer um novo Select. Select de Select. Essa técnica é muito interessante pois vc fazendo em partes, só busca o que realmente precisa e não tudo.
Pensei numa outra possibilidade pra vc.
Tente ai ...
SELECT ESTADO,
SUM( CASE WHEN OPERACAO = 64 THEN VALORTOTALNOTA ELSE 0 END ) AS VALOTTOTAL ,
SUM( CASE WHEN OPERACAO = 81 THEN VALORTOTALNOTA ELSE 0 END ) AS DEVOLUCAO
FROM NOTAFISCAL
WHERE OPERACAO IN ( 64 , 81 ) AND
STATUSNFE=100
GROUP BY ESTADO
Gostei + 0
18/05/2020
Weskley Rocha
Eu acho que faltou vc vincular o Estado no segundo Select.
Eu faria assim:
SELECT A.ESTADO ,
A.VALORTOTAL ,
( SELECT SUM(VALORTOTALNOTA)
FROM NOTAFISCAL
WHERE OPERACAO=81 AND
STATUSNFE=100 AND
ESTADO = A.ESTADO ) AS DEVOLUCAO
FROM
(
SELECT ESTADO,
SUM( VALORTOTALNOTA ) AS VALORTOTAL
FROM NOTAFISCAL
WHERE OPERACAO=64 AND
STATUSNFE=100
GROUP BY ESTADO
) A
Rapais deu certo hein, agora uma dúvida no seu comando logo após o SELECT vc colocou a coluna A.VALORTOTAL, de onde ela veio já que não existe ela na tabela, eu faço ideia de onde ela veio olhando seu comando, mas isso é possível no SQL? E muito obrigado pela ajuda.
O Select na tabela NotaFiscal eu chamei de "A" ( a última linha do comando: ") A" ) para fazer um novo Select. Select de Select. Essa técnica é muito interessante pois vc fazendo em partes, só busca o que realmente precisa e não tudo.
Pensei numa outra possibilidade pra vc.
Tente ai ...
SELECT ESTADO,
SUM( CASE WHEN OPERACAO = 64 THEN VALORTOTALNOTA ELSE 0 END ) AS VALOTTOTAL ,
SUM( CASE WHEN OPERACAO = 81 THEN VALORTOTALNOTA ELSE 0 END ) AS DEVOLUCAO
FROM NOTAFISCAL
WHERE OPERACAO IN ( 64 , 81 ) AND
STATUSNFE=100
GROUP BY ESTADO
Ficou bacana de mais também esse usando o CASE, ainda não cheguei nele, mas tenho uma pequena noção do uso do CASE já, e se eu não quisesse ver a coluna VALORTOTAL nem coluna DEVOLUCAO mas sim ver o resultado de VALORTOTAL-DEVOLUCAO=VALORLIQUIDO? tentei aqui mexer com o conhecimento que tenho mais não foi não.
Gostei + 0
19/05/2020
Márcio Brigatto
Eu acho que faltou vc vincular o Estado no segundo Select.
Eu faria assim:
SELECT A.ESTADO ,
A.VALORTOTAL ,
( SELECT SUM(VALORTOTALNOTA)
FROM NOTAFISCAL
WHERE OPERACAO=81 AND
STATUSNFE=100 AND
ESTADO = A.ESTADO ) AS DEVOLUCAO
FROM
(
SELECT ESTADO,
SUM( VALORTOTALNOTA ) AS VALORTOTAL
FROM NOTAFISCAL
WHERE OPERACAO=64 AND
STATUSNFE=100
GROUP BY ESTADO
) A
Rapais deu certo hein, agora uma dúvida no seu comando logo após o SELECT vc colocou a coluna A.VALORTOTAL, de onde ela veio já que não existe ela na tabela, eu faço ideia de onde ela veio olhando seu comando, mas isso é possível no SQL? E muito obrigado pela ajuda.
O Select na tabela NotaFiscal eu chamei de "A" ( a última linha do comando: ") A" ) para fazer um novo Select. Select de Select. Essa técnica é muito interessante pois vc fazendo em partes, só busca o que realmente precisa e não tudo.
Pensei numa outra possibilidade pra vc.
Tente ai ...
SELECT ESTADO,
SUM( CASE WHEN OPERACAO = 64 THEN VALORTOTALNOTA ELSE 0 END ) AS VALOTTOTAL ,
SUM( CASE WHEN OPERACAO = 81 THEN VALORTOTALNOTA ELSE 0 END ) AS DEVOLUCAO
FROM NOTAFISCAL
WHERE OPERACAO IN ( 64 , 81 ) AND
STATUSNFE=100
GROUP BY ESTADO
Ficou bacana de mais também esse usando o CASE, ainda não cheguei nele, mas tenho uma pequena noção do uso do CASE já, e se eu não quisesse ver a coluna VALORTOTAL nem coluna DEVOLUCAO mas sim ver o resultado de VALORTOTAL-DEVOLUCAO=VALORLIQUIDO? tentei aqui mexer com o conhecimento que tenho mais não foi não.
Fica assim:
SELECT ESTADO,
SUM( CASE WHEN OPERACAO = 64 THEN VALORTOTALNOTA ELSE 0 END -
CASE WHEN OPERACAO = 81 THEN VALORTOTALNOTA ELSE 0 END ) AS LIQUIDO
FROM NOTAFISCAL
WHERE OPERACAO IN ( 64 , 81 ) AND
STATUSNFE=100
GROUP BY ESTADO
Gostei + 0
19/05/2020
Weskley Rocha
Eu acho que faltou vc vincular o Estado no segundo Select.
Eu faria assim:
SELECT A.ESTADO ,
A.VALORTOTAL ,
( SELECT SUM(VALORTOTALNOTA)
FROM NOTAFISCAL
WHERE OPERACAO=81 AND
STATUSNFE=100 AND
ESTADO = A.ESTADO ) AS DEVOLUCAO
FROM
(
SELECT ESTADO,
SUM( VALORTOTALNOTA ) AS VALORTOTAL
FROM NOTAFISCAL
WHERE OPERACAO=64 AND
STATUSNFE=100
GROUP BY ESTADO
) A
Rapais deu certo hein, agora uma dúvida no seu comando logo após o SELECT vc colocou a coluna A.VALORTOTAL, de onde ela veio já que não existe ela na tabela, eu faço ideia de onde ela veio olhando seu comando, mas isso é possível no SQL? E muito obrigado pela ajuda.
O Select na tabela NotaFiscal eu chamei de "A" ( a última linha do comando: ") A" ) para fazer um novo Select. Select de Select. Essa técnica é muito interessante pois vc fazendo em partes, só busca o que realmente precisa e não tudo.
Pensei numa outra possibilidade pra vc.
Tente ai ...
SELECT ESTADO,
SUM( CASE WHEN OPERACAO = 64 THEN VALORTOTALNOTA ELSE 0 END ) AS VALOTTOTAL ,
SUM( CASE WHEN OPERACAO = 81 THEN VALORTOTALNOTA ELSE 0 END ) AS DEVOLUCAO
FROM NOTAFISCAL
WHERE OPERACAO IN ( 64 , 81 ) AND
STATUSNFE=100
GROUP BY ESTADO
Muito obrigado, como ficou simples o código, tinha visto outros exemplos gigantescos rsrsrs. Muito obrigado pela ajuda.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)