1
resposta

Resolução

Pode verificar? Seria interessante explicar a função with

WITH QUANTIDADE AS (
    SELECT
        NF.CPF,
        FORMAT(NF.DATA_VENDA, 'yyyy-MM') AS MÊS,
        SUM(INF.QUANTIDADE) AS TOTAL_QUANTIDADE
    FROM
        NOTAS_FISCAIS NF
    INNER JOIN
        ITENS_NOTAS_FISCAIS INF ON NF.NUMERO = INF.NUMERO
    GROUP BY
        NF.CPF, FORMAT(NF.DATA_VENDA, 'yyyy-MM')
),
LIMITE AS (
    SELECT
        CPF,
        VOLUME_DE_COMPRA
    FROM
        TABELA_DE_CLIENTES
)

SELECT
    Q.CPF,
    Q.MÊS,
    Q.TOTAL_QUANTIDADE,
    L.VOLUME_DE_COMPRA,
    CASE WHEN L.VOLUME_DE_COMPRA >= Q.TOTAL_QUANTIDADE THEN 'VENDAS VALIDAS'
        ELSE 'VENDA INVALIDAS' END AS RESULTADO
FROM
    QUANTIDADE Q
INNER JOIN
    LIMITE L ON Q.CPF = L.CPF
WHERE 
    Q.MÊS = '2015-01';
1 resposta

Olá, Maykon, tudo bem?

Em SQL, a cláusula WITH é usada para criar subconsultas nomeadas, também conhecidas como "common table expressions" (CTEs). Ela permite que você defina uma consulta nomeada temporária que pode ser referenciada dentro de uma consulta principal. Isso pode tornar consultas complexas mais legíveis e fáceis de entender, além de permitir a reutilização de partes da consulta em várias partes da consulta principal.

A estrutura é:

WITH nome_da_cte AS (
    consulta
)

No código que você compartilhou, a cláusula WITH é usada para criar duas CTEs: QUANTIDADE e LIMITE.

Depois de definidas, essas CTEs são usadas na consulta principal para calcular o resultado final:

SELECT
    Q.CPF,
    Q.MÊS,
    Q.TOTAL_QUANTIDADE,
    L.VOLUME_DE_COMPRA,
    CASE WHEN L.VOLUME_DE_COMPRA >= Q.TOTAL_QUANTIDADE THEN 'VENDAS VALIDAS'
        ELSE 'VENDA INVALIDAS' END AS RESULTADO
FROM
    QUANTIDADE Q -- CTE Quantidade
INNER JOIN 
    LIMITE L ON Q.CPF = L.CPF -- CTE Limite
WHERE 
    Q.MÊS = '2015-01'; 

Nessa consulta, as CTEs QUANTIDADE e LIMITE são unidas por meio de um INNER JOIN, e a cláusula CASE é usada para determinar se as vendas são válidas ou inválidas com base no volume de compra.

Espero ter ajudado.

Caso surja alguma dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!