Fórum Somar vendas e devoluções para obter a venda líquida #610694

18/05/2020

0

SQL

Boa noite Estou estudando T-SQL e me deparei com uma situação que não consigo sair dela, preciso somar todas as vendas por estado de uma tabela onde a operacao = 64 somar todas as devoluções por estado na mesma tabela porém com operacao = 81 e em seguida subtrair uma da outra, mas não está saindo rsrs. Alguém poderia me ajudar?
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

Weskley Rocha

Responder

Posts

18/05/2020

Márcio Brigatto

Boa noite Estou estudando T-SQL e me deparei com uma situação que não consigo sair dela, preciso somar todas as vendas por estado de uma tabela onde a operacao = 64 somar todas as devoluções por estado na mesma tabela porém com operacao = 81 e em seguida subtrair uma da outra, mas não está saindo rsrs. Alguém poderia me ajudar?
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.
Responder

Gostei + 0

18/05/2020

Márcio Brigatto

Bom dia!
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
Responder

Gostei + 0

18/05/2020

Weskley Rocha

Bom dia!
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.
Responder

Gostei + 0

18/05/2020

Márcio Brigatto

Bom dia!
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
Responder

Gostei + 0

18/05/2020

Weskley Rocha

Bom dia!
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.
Responder

Gostei + 0

19/05/2020

Márcio Brigatto

Bom dia!
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
Responder

Gostei + 0

19/05/2020

Weskley Rocha

Bom dia!
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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar