Somar select com union
Prezados,
Estou com dificuldade com a função SUM em um select com UNION
Com esse código acima ele me traz os valores abaixo, gostaria de somar os valores, mas tenho dificuldade.
$274.814,13
R$22.547,67
Tentei fazer a soma da seguinte formar, mas ele retorna com erro. "O tipo de dados de operando nvarchar é inválido para o operador sum"
Alguém consegue me ajudar?
Estou com dificuldade com a função SUM em um select com UNION
SELECT FORMAT(SUM(A.VALORTOTAL)/12, 'C', 'pt-br') VALOR FROM ft_armazenagem A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.clientefaturamento) AND A.DATAfechamento >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.TIPO NOT IN (2,3) AND A.STATUS NOT IN (6) UNION ALL SELECT FORMAT(SUM(A.VALORTOTAL)/12, 'C', 'pt-br') VALOR FROM CO_CONTRATOFATURAMENTO A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.PESSOA) AND A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.STATUS NOT IN (6)
Com esse código acima ele me traz os valores abaixo, gostaria de somar os valores, mas tenho dificuldade.
$274.814,13
R$22.547,67
Tentei fazer a soma da seguinte formar, mas ele retorna com erro. "O tipo de dados de operando nvarchar é inválido para o operador sum"
SELECT SUM(VALOR) MEDIA FROM (SELECT FORMAT(SUM(A.VALORTOTAL)/12, 'C', 'pt-br') VALOR FROM ft_armazenagem A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.clientefaturamento) AND A.DATAfechamento >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.TIPO NOT IN (2,3) AND A.STATUS NOT IN (6) UNION ALL SELECT FORMAT(SUM(A.VALORTOTAL)/12, 'C', 'pt-br') VALOR FROM CO_CONTRATOFATURAMENTO A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.PESSOA) AND A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.STATUS NOT IN (6) )TAB
Alguém consegue me ajudar?
Isaque
Curtidas 0
Melhor post
Emerson Nascimento
13/07/2020
tente assim:
SELECT FORMAT(SUM(VLTOTAL), 'C', 'pt-br') VALOR -- SOMENTE aqui você formata como texto FROM ( SELECT (SUM(A.VALORTOTAL)/12) VLTOTAL -- aqui você NÃO formata como texto FROM ft_armazenagem A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.clientefaturamento) AND A.DATAfechamento >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.TIPO NOT IN (2,3) AND A.STATUS NOT IN (6) UNION ALL SELECT (SUM(A.VALORTOTAL)/12) VLTOTAL -- aqui você NÃO formata como texto FROM CO_CONTRATOFATURAMENTO A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.PESSOA) AND A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.STATUS NOT IN (6) ) T
GOSTEI 2
Mais Respostas
Jothaz
11/07/2020
A forma mais fácil é criar uma tabela temporária com e depois somar os campos.
Não tenho como testar agora, mas é algo assim:
SELECT INTO
Não tenho como testar agora, mas é algo assim:
SELECT * INTO mytmp FROM ( SELECT A.VALORTOTAL VALOR FROM ft_armazenagem A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.clientefaturamento) AND A.DATAfechamento >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.TIPO NOT IN (2,3) AND A.STATUS NOT IN (6) UNION ALL SELECT A.VALORTOTAL VALOR FROM CO_CONTRATOFATURAMENTO A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.PESSOA) AND A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.STATUS NOT IN (6) ) as tmp select FORMAT(SUM(VALOR)/12, 'C', 'pt-br') VALOR from mytmp drop table mytmp
GOSTEI 1
Isaque
11/07/2020
tente assim:
Obrigado, Funcionou perfeitamente.
SELECT FORMAT(SUM(VLTOTAL), 'C', 'pt-br') VALOR -- SOMENTE aqui você formata como texto FROM ( SELECT (SUM(A.VALORTOTAL)/12) VLTOTAL -- aqui você NÃO formata como texto FROM ft_armazenagem A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.clientefaturamento) AND A.DATAfechamento >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.TIPO NOT IN (2,3) AND A.STATUS NOT IN (6) UNION ALL SELECT (SUM(A.VALORTOTAL)/12) VLTOTAL -- aqui você NÃO formata como texto FROM CO_CONTRATOFATURAMENTO A INNER JOIN MS_PESSOA B ON (B.HANDLE = A.PESSOA) AND A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -11, 0) AND A.STATUS NOT IN (6) ) T
GOSTEI 0