Olá, boa noite, optei por utilizar a função extract para recuperar o ano, está correto?
SELECT ('O Cliente ' || CLI.NOME || ' faturou ' || ROUND(SUM(PRECO * QUANTIDADE),2) || ' R$ no ano de ' || EXTRACT(YEAR FROM NF.DATA_VENDA))
FROM TABELA_DE_CLIENTES CLI
INNER JOIN NOTAS_FISCAIS NF ON CLI.CPF = NF.CPF
INNER JOIN ITENS_NOTAS_FISCAIS INF ON NF.NUMERO = INF.NUMERO
WHERE EXTRACT(YEAR FROM NF.DATA_VENDA) = 2016
GROUP BY CLI.NOME, EXTRACT(YEAR FROM NF.DATA_VENDA);
outra opção seria
SELECT ('O Cliente ' || CLI.NOME || ' faturou ' || ROUND(SUM(PRECO * QUANTIDADE),2) || ' R$ no ano de 2016' )
FROM TABELA_DE_CLIENTES CLI
INNER JOIN NOTAS_FISCAIS NF ON CLI.CPF = NF.CPF
INNER JOIN ITENS_NOTAS_FISCAIS INF ON NF.NUMERO = INF.NUMERO
WHERE EXTRACT(YEAR FROM NF.DATA_VENDA) = 2016
GROUP BY CLI.NOME;
Pois a data ja está explicitada no where.
Uma sugestão para ficar mais claro o enunciado:
Queremos construir um SQL cujo resultado seja, para cada cliente:
"O cliente 'x' faturou 'x' no ano de 'yyyy'." (exibir com duas casas decimais)
Faça isso somente para o ano de 2016.
É difícil de acontecer mas a pessoa poderia ter um erro de interpretação e fazer algo do tipo
SELECT ('O cliente João da Silva faturou 120000 no ano de 2016')
FROM TABELA_DE_CLIENTES
Uma outra dúvida que fiquei, no caso não seria o quanto ele gastou em vez de faturou, pois trata-se do cliente e não do fornecedor.