Como exercício, fiz o código da última aula, sem utilizar o looping do WHILE, apenas JOINS e AGREGAÇÕES como o professor sugeriu. O código consiste em agrupar os dados, realizando o cálculo do valor total das vendas por cliente, num determinado mês e ano.
DECLARE @ANO INT, @MES INT;
DECLARE @TABELA_RANKING TABLE (CPF VARCHAR(11), NOME VARCHAR(100), ANO VARCHAR(4), MES VARCHAR(2), VALOR_TOTAL FLOAT)
SET @ANO = 2015;
SET @MES = 1;
INSERT INTO @TABELA_RANKING
SELECT
[TABELA DE CLIENTES].CPF
, [TABELA DE CLIENTES].NOME
, YEAR([NOTAS FISCAIS].DATA) AS ANO
, MONTH([NOTAS FISCAIS].DATA) AS MES
, ROUND(SUM([ITENS NOTAS FISCAIS].QUANTIDADE * [ITENS NOTAS FISCAIS].PREÇO), 2) AS VALOR_TOTAL -- ROUND converte para 2 casas decimais
FROM [TABELA DE CLIENTES]
INNER JOIN [NOTAS FISCAIS]
ON [TABELA DE CLIENTES].CPF = [NOTAS FISCAIS].CPF
INNER JOIN [ITENS NOTAS FISCAIS]
ON [NOTAS FISCAIS].NUMERO = [ITENS NOTAS FISCAIS].NUMERO
WHERE YEAR([NOTAS FISCAIS].DATA) = @ANO
AND MONTH([NOTAS FISCAIS].DATA) = @MES
GROUP BY
[TABELA DE CLIENTES].CPF
, [TABELA DE CLIENTES].NOME
, YEAR([NOTAS FISCAIS].DATA)
, MONTH([NOTAS FISCAIS].DATA)
SELECT * FROM @TABELA_RANKING
ORDER BY VALOR_TOTAL DESC;