Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Organizando código

Me ajudem pessoal. Eu fiz um inner join com duas subqueries e agora queria saber como deixar o código mais user friendly. Está muito emaranhado.

--SUBQUERY
--PEGA O ANO EM NOTAS FISCAIS E CALCULA O IMPOSTO TOTAL PARA CADA ANO
SELECT YEAR(DATA) AS DATA, FLOOR(SUM(IMPOSTO * QUANTIDADE)) AS TOTAL_IMPOSTO
FROM [NOTAS FISCAIS] NF
INNER JOIN [ITENS NOTAS FISCAIS] INF ON NF.NUMERO = INF.NUMERO
GROUP BY YEAR(DATA) ORDER BY DATA

--SUBQUERY
        --MULTIPLICA  QUANTIDADE DE ITENS PELO LUCRO         //              ,NOTAS FISCAIS * ITENS NOTAS FISCAIS
SELECT YEAR(DATA) AS 'ANO',COUNT(*) AS 'Q. VENDAS', FLOOR(SUM(QUANTIDADE * PREÇO)) AS 'LUCRO NAO DESCONTADO' FROM [NOTAS FISCAIS] INNER JOIN
[ITENS NOTAS FISCAIS] ON [NOTAS FISCAIS].NUMERO = [ITENS NOTAS FISCAIS].NUMERO
GROUP BY YEAR(DATA) ORDER BY ANO

--INNER JOIN
SELECT I.DATA, I.TOTAL_IMPOSTO AS IMPOSTO, L.LUCRO AS VBRUTO, SUM(L.LUCRO - I.TOTAL_IMPOSTO) AS VLUCRO FROM (SELECT YEAR(DATA) AS DATA, FLOOR(SUM(IMPOSTO * QUANTIDADE)) AS TOTAL_IMPOSTO
FROM [NOTAS FISCAIS] NF
INNER JOIN [ITENS NOTAS FISCAIS] INF ON NF.NUMERO = INF.NUMERO
GROUP BY YEAR(DATA)) I INNER JOIN (SELECT YEAR(DATA) AS 'ANO',COUNT(*) AS 'Q. VENDAS', FLOOR(SUM(QUANTIDADE * PREÇO)) AS 'LUCRO' FROM [NOTAS FISCAIS] INNER JOIN
[ITENS NOTAS FISCAIS] ON [NOTAS FISCAIS].NUMERO = [ITENS NOTAS FISCAIS].NUMERO
GROUP BY YEAR(DATA)) L ON I.DATA = L.ANO
GROUP BY I.DATA, I.TOTAL_IMPOSTO, L.LUCRO
3 respostas

Consegui simplificar para ficar em apenas uma inner join:

--VERSÃO SIMPLIFICADA
SELECT YEAR(DATA) AS DATA, FLOOR(SUM(IMPOSTO * QUANTIDADE)) AS IMPOSTO, FLOOR(SUM(QUANTIDADE * PREÇO)) AS BRUTO, FLOOR(SUM((QUANTIDADE * PREÇO) - (IMPOSTO * QUANTIDADE))) AS VLUCRO
FROM [NOTAS FISCAIS] NF 
INNER JOIN [ITENS NOTAS FISCAIS] INF ON NF.NUMERO = INF.NUMERO
GROUP BY YEAR(DATA) ORDER BY DATA

Olá Gustavo,

A primeira ficou bem confusa, mas na segunda está bem mais simples.

Sobre o a informação lucro, acredito não está certa.

Lucro: (venda - impostos - custo) * quantidade

SELECT YEAR(DATA) AS DATA,
       SUM(IMPOSTO * QUANTIDADE) AS TOTAL_IMPOSTO,
       SUM(QUANTIDADE * PREÇO) AS TOTAL_FATURAMENTO,
       SUM(QUANTIDADE * (PREÇO - IMPOSTOS - CUSTO )) AS TOTAL_LUCRO
FROM [NOTAS FISCAIS] NF
INNER JOIN [ITENS NOTAS FISCAIS] INF ON NF.NUMERO = INF.NUMERO
GROUP BY YEAR(DATA)
ORDER BY DATA
solução!

Muito obrigado pela dica Leonardo, ficou bem organizado.

Só uma duvida: o que seria esse 'custo' que você colocou no código? não estou identificando a qual tabela ele pertence.