Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Solução Minimalista

Primeiro criei duas funções, uma para categorizar os departamentos e outra para calcular o faturamento por sabor em um intervalo de data

CREATE FUNCTION CATEGORIA (@SABOR VARCHAR(20))
RETURNS VARCHAR(100)
AS
BEGIN
    DECLARE @MENSAGEM VARCHAR(100)
    IF @SABOR = 'Laranja' OR @SABOR = 'Lima/Limão' OR @SABOR = 'Maracujá' OR @SABOR = 'Morango/Limão' 
        SET @MENSAGEM = 'FRUTAS CÍTRICAS'
    ELSE
        SET @MENSAGEM = 'FRUTAS NÃO CÍTRICAS'
    RETURN @MENSAGEM
END;

CREATE FUNCTION FaturamentoPorSaborIntervalo
(@SABOR VARCHAR(20), @DATA_INIC DATETIME, @DATA_FIN DATETIME)
RETURNS FLOAT
AS
BEGIN
    DECLARE @FATURAMENTO FLOAT
    SELECT @FATURAMENTO = SUM(A.QUANTIDADE * A.PREÇO)
    FROM [NOTAS FISCAIS] NF
    INNER JOIN (SELECT TP.SABOR,INF.NUMERO, INF.QUANTIDADE, INF.PREÇO
    FROM [TABELA DE PRODUTOS] TP
    INNER JOIN [ITENS NOTAS FISCAIS] INF
    ON TP.[CODIGO DO PRODUTO] = INF.[CODIGO DO PRODUTO]) A
    ON NF.NUMERO = A.NUMERO
    WHERE NF.[DATA] >= @DATA_INIC AND NF.[DATA] <= @DATA_FIN AND A.SABOR = @SABOR	
RETURN @FATURAMENTO
END;

Feito isso criei uma Procedure que pede de input uma data inicial e uma data final:

CREATE PROCEDURE RELATORIO
(
@DATA_INIC DATETIME,
@DATA_FIN DATETIME
)
AS
BEGIN
    SELECT DISTINCT SABOR, dbo.CATEGORIA(SABOR) AS DEPARTAMENTO, dbo.FaturamentoPorSaborIntervalo(SABOR,@DATA_INIC,@DATA_FIN) AS FATURAMENTO FROM [TABELA DE PRODUTOS];
END

Depois testei a Procedure com um intervalo:

EXEC dbo.RELATORIO '20170101','20171231';

e esse foi o resultado (Acredito que quanto mais simples melhor):

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Oi, Marcus, tudo bem?

Parabéns pelo resultado, ficou ótimo! Também agradeço por compartilhar seu projeto, com certeza vai ajudar nos estudos de todas as pessoas que estão aprendendo este mesmo assunto.

Continue mergulhando em tecnologia e se tiver dúvidas, conte com o fórum.

Abraços e bons estudos!