Vou deixar minha solução aqui, bem parecida com a lógica do video, porém sem fazer a conversão da data para varchar (fez mais sentindo para mim deixar a data como data mesmo)
SELECT a.[NOME],
a.ANO_COMPRA,
a.MES_COMPRA,
a.QUANTIDADE_COMPRADA,
CASE
WHEN a.[VOLUME DE COMPRA] < a.QUANTIDADE_COMPRADA THEN 'VENDA INVÁLIDA'
WHEN a.[VOLUME DE COMPRA] >= a.QUANTIDADE_COMPRADA THEN 'VENDA VÁLIDA'
END AS STATUS_VENDA
FROM (SELECT [NOTAS FISCAIS].CPF,
[TABELA DE CLIENTES].NOME,
DATEPART(YEAR, [NOTAS FISCAIS].DATA) AS ANO_COMPRA,
DATEPART(MONTH, [NOTAS FISCAIS].DATA) AS MES_COMPRA,
SUM([ITENS NOTAS FISCAIS].[QUANTIDADE]) AS QUANTIDADE_COMPRADA,
[TABELA DE CLIENTES].[VOLUME DE COMPRA]
FROM [NOTAS FISCAIS]
INNER JOIN [ITENS NOTAS FISCAIS]
ON [NOTAS FISCAIS].NUMERO = [ITENS NOTAS FISCAIS].NUMERO
INNER JOIN [TABELA DE CLIENTES]
ON [NOTAS FISCAIS].CPF = [TABELA DE CLIENTES].CPF
GROUP BY [NOTAS FISCAIS].CPF,
[TABELA DE CLIENTES].NOME,
DATEPART(YEAR, [NOTAS FISCAIS].DATA),
DATEPART(MONTH, [NOTAS FISCAIS].DATA),
[TABELA DE CLIENTES].[VOLUME DE COMPRA]) as a
ORDER BY a.NOME, a.MES_COMPRA, a.ANO_COMPRA
Meu marido é analista e me ensinou um outra forma, com o comando CROSS APPLY e OUTER APPLY, legal que usando o OUTER APPLY lista uma linha a mais, com um cliente que não comprou nada.
SELECT Clientes.[NOME],
Notas.ANO_COMPRA,
Notas.MES_COMPRA,
Notas.QUANTIDADE_COMPRADA,
CASE
WHEN Clientes.[VOLUME DE COMPRA] < Notas.QUANTIDADE_COMPRADA THEN 'VENDA INVÁLIDA'
WHEN Clientes.[VOLUME DE COMPRA] >= Notas.QUANTIDADE_COMPRADA THEN 'VENDA VÁLIDA'
ELSE 'Não existe nota para este CPF: '+Clientes.CPF
END AS STATUS_VENDA
FROM [TABELA DE CLIENTES] AS Clientes
--// OUTER APPLY tem a mesma funcionalidade do LEFT JOIN, ou seja,
--// NÃO irá obrigar a ter dados nas duas tabelas envolvidas
OUTER APPLY (SELECT DATEPART(YEAR, Notas.DATA) AS ANO_COMPRA,
DATEPART(MONTH, Notas.DATA) AS MES_COMPRA,
SUM(Notas_Itens.QUANTIDADE) AS QUANTIDADE_COMPRADA
FROM [NOTAS FISCAIS] AS Notas
INNER JOIN [ITENS NOTAS FISCAIS] AS Notas_Itens
ON Notas_Itens.NUMERO = Notas.NUMERO
WHERE Notas.CPF = Clientes.CPF
GROUP BY DATEPART(YEAR, Notas.DATA),
DATEPART(MONTH, Notas.DATA)) AS Notas
--// CROSS APPLY tem a mesma funcionalidade do INNER JOIN, ou seja,
--// irá obrigar a ter dados nas duas tabelas envolvidas
--CROSS APPLY (SELECT DATEPART(YEAR, Notas.DATA) AS ANO_COMPRA,
-- DATEPART(MONTH, Notas.DATA) AS MES_COMPRA,
-- SUM(Notas_Itens.QUANTIDADE) AS QUANTIDADE_COMPRADA
-- FROM [NOTAS FISCAIS] AS Notas
-- INNER JOIN [ITENS NOTAS FISCAIS] AS Notas_Itens
-- ON Notas_Itens.NUMERO = Notas.NUMERO
-- WHERE Notas.CPF = Clientes.CPF
-- GROUP BY DATEPART(YEAR, Notas.DATA),
-- DATEPART(MONTH, Notas.DATA)) AS Notas
ORDER BY Clientes.Nome, Notas.ANO_COMPRA, Notas.MES_COMPRA