0
respostas

MINHA RESOLUÇÃO

CREATE NONCLUSTERED INDEX IX_NOTAS_FISCAIS_DATA
ON [NOTAS FISCAIS] ([DATA]);

CREATE OR ALTER PROCEDURE dbo.RetornaDepartamentoFaturamento
    @DATA_INICIAL DATE = NULL,
    @DATA_FINAL   DATE = NULL
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @FATURAMENTO_SETOR TABLE (DEPARTAMENTO VARCHAR(20), FATURAMENTO FLOAT);

    IF @DATA_INICIAL IS NULL
    BEGIN
        SELECT @DATA_INICIAL = MIN([DATA])
        FROM [NOTAS FISCAIS];
    END;

    IF @DATA_FINAL IS NULL
    BEGIN
        SELECT @DATA_FINAL = MAX([DATA])
        FROM [NOTAS FISCAIS];
    END;

    INSERT INTO @FATURAMENTO_SETOR(DEPARTAMENTO, FATURAMENTO)
    SELECT
        DEP.DEPARTAMENTO,
        SUM(INF.[PREÇO] * INF.QUANTIDADE) AS FATURAMENTO
    FROM [TABELA DE PRODUTOS] TB
    JOIN [ITENS NOTAS FISCAIS] INF
        ON TB.[CODIGO DO PRODUTO] = INF.[CODIGO DO PRODUTO]
    JOIN [NOTAS FISCAIS] NF
        ON INF.NUMERO = NF.NUMERO
    JOIN (
        SELECT DISTINCT
            SABOR,
            CASE
                WHEN SABOR IN (
                    'Açai','Cereja','Cereja/Maça',
                    'Maça','Manga','Maracujá','Melância'
                ) THEN 'FRUTAS NÃO CÍTRICAS'
                WHEN SABOR IN (
                    'Laranja','Lima/Limão','Morango',
                    'Morango/Limão','Uva'
                ) THEN 'FRUTAS CÍTRICAS'
                ELSE 'SETOR NÃO DEFINIDO'
            END AS DEPARTAMENTO
        FROM [TABELA DE PRODUTOS]
    ) DEP
        ON DEP.SABOR = TB.SABOR
    WHERE NF.DATA >= @DATA_INICIAL
      AND NF.DATA < DATEADD(DAY, 1, @DATA_FINAL)
    GROUP BY DEP.DEPARTAMENTO;
SELECT * FROM @FATURAMENTO_SETOR
END;


EXEC RetornaDepartamentoFaturamento '2015-08-01', '2015-08-31'