1
resposta

No

Para construir um SQL cujo resultado seja, para cada cliente: **"O cliente João da Silva faturou 120000 no ano de 2016".

Precisaremos dos campos [NOME], QUANTIDADE*PREÇO para o faturamento e YEAR(DATA) para obter o ano. Posso conseguir estes dados com o código abaixo:

SELECT [NOME], QUANTIDADE*PREÇO, YEAR(DATA)
FROM [TABELA DE CLIENTES] C INNER JOIN [NOTAS FISCAIS] N
ON C.[CPF] = N.[CPF] INNER JOIN [ITENS NOTAS FISCAIS] I
ON N.[NUMERO] = I.[NUMERO]
WHERE YEAR(DATA) = 2016;

Este query funciona, mas quando uso o código abaixo para formar a frase:

SELECT 'O cliente ' + [NOME] + ' faturou ' + QUANTIDADE*PREÇO + ' no ano de ' +  YEAR(DATA)
FROM [TABELA DE CLIENTES] C INNER JOIN [NOTAS FISCAIS] N
ON C.[CPF] = N.[CPF] INNER JOIN [ITENS NOTAS FISCAIS] I
ON N.[NUMERO] = I.[NUMERO]
WHERE YEAR(DATA) = 2016;

Apresenta a seguinte mensagem de erro:

Mensagem 8114, Nível 16, Estado 5, Linha 35
Erro ao converter tipo de dados varchar em float.

Creio que este erro está por algum motivo na multiplicação dos campos [QUANTIDADE] e [PREÇO], mas não sei como resolver isto.

Por favor, preciso de orientação para resolver isto.

1 resposta

Olá Paulo, tudo bem?

Desta forma, não é possível realizar uma concatenação de campos que são de tipos diferentes. Para que você possa concatenar esses campos, você pode utilizar a função CONVERT, que é utilizada para converter uma expressão de um tipo de dados em outro.

  • A sintaxe da função é:
CONVERT ( tipo, expressão ) 
  1. O primeiro campo da função, informamos o tipo para qual a expressão será convertida

  2. No segundo campo informamos a expressão que será convertida

  • Como por exemplo:
CONVERT(VARCHAR, CONVERT(DECIMAL(15,2), SUM(INF.QUANTIDADE * INF.[PREÇO])))

Convertendo o resultado da função SUM para o tipo DECIMAL(15,2), e em seguida convertendo para VARCHAR.

CONVERT(VARCHAR, YEAR(NF.DATA))

Convertendo o campo DATA para VARCHAR.

  • A query completa do instrutor:
SELECT CONCAT('O cliente ', TC.NOME, ' faturou ', 
CONVERT(VARCHAR, CONVERT(DECIMAL(15,2), SUM(INF.QUANTIDADE * INF.[PREÇO]))), ' no ano ',   CONVERT(VARCHAR, YEAR(NF.DATA))) AS SENTENCA FROM [NOTAS FISCAIS] NF
INNER JOIN [ITENS NOTAS FISCAIS] INF ON NF.NUMERO = INF.NUMERO
INNER JOIN [TABELA DE CLIENTES] TC ON NF.CPF = TC.CPF
WHERE YEAR(DATA) = 2016
GROUP BY TC.NOME, YEAR(DATA)

A título de curiosidade, caso queira ler um pouco mais sobre a função CONVERT, indico a documentação do SQL Server.

Espero ter ajudado, qualquer dúvida é só falar e bons estudos!

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