Estou fazendo esse SELECT, alguém poderia me ajudar?

SQL Server

MySQL

03/08/2019

Bom estou realizando esse select em duas tabelas e gostaria que o retorno do campo (valortotal) vinhe-se agrupado.
Do jeito que estou fazendo ele retorna o valor só que em duas linhas.

SELECT SUM( A.VALORTOTAL )
FROM CO_CONTRATOFATURAMENTO A
WHERE A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
AND NOT A.STATUS = 6

UNION

SELECT SUM( A.VALORTOTAL )
FROM FT_ARMAZENAGEM A
WHERE A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
AND A.TIPO NOT IN (2,3)

Alguém pode me ajudar?
Isaque

Isaque

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

05/08/2019

você precisa somar as duas linhas obtidas. assim:
SELECT SUM(TOTAL) TOTALGERAL FROM
(	SELECT SUM(VALORTOTAL) TOTAL FROM CO_CONTRATOFATURAMENTO
	WHERE DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1,0 )
	AND NOT DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
	AND NOT STATUS = 6

	UNION ALL

	SELECT SUM(VALORTOTAL) FROM FT_ARMAZENAGEM
	WHERE DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
	AND NOT DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
	AND TIPO NOT IN (2,3)
) TAB



GOSTEI 3

Mais Respostas

Kleber Santos

Kleber Santos

03/08/2019

Bom estou realizando esse select em duas tabelas e gostaria que o retorno do campo (valortotal) vinhe-se agrupado.
Do jeito que estou fazendo ele retorna o valor só que em duas linhas.

SELECT SUM( A.VALORTOTAL )
FROM CO_CONTRATOFATURAMENTO A
WHERE A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
AND NOT A.STATUS = 6

UNION

SELECT SUM( A.VALORTOTAL )
FROM FT_ARMAZENAGEM A
WHERE A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
AND A.TIPO NOT IN (2,3)

Alguém pode me ajudar?

SELECT (TABELA_CONTRATO.SOMACONTRATO (troque por sinal de mais) TABELA_ARMAZENAGEM.SOMAARMAZENAGEM) AS TOTAL
FROM (
    SELECT SUM( A.VALORTOTAL ) AS SOMACONTRATO
    FROM CO_CONTRATOFATURAMENTO A
    WHERE A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
    AND NOT A.DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
    AND NOT A.STATUS = 6
    ) TABELA_CONTRATO,

    (SELECT SUM( A.VALORTOTAL ) AS SOMAARMAZENAGEM
    FROM FT_ARMAZENAGEM A
    WHERE A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
    AND NOT A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
    AND A.TIPO NOT IN (2,3)
    ) TABELA_ARMAZENAGEM
WHERE 1=1

+
Eu não domino o UNION, veja se dessa forma vai apresentar uma soma correta
GOSTEI 1
Kleber Santos

Kleber Santos

03/08/2019

Bom estou realizando esse select em duas tabelas e gostaria que o retorno do campo (valortotal) vinhe-se agrupado.
Do jeito que estou fazendo ele retorna o valor só que em duas linhas.

SELECT SUM( A.VALORTOTAL )
FROM CO_CONTRATOFATURAMENTO A
WHERE A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
AND NOT A.STATUS = 6

UNION

SELECT SUM( A.VALORTOTAL )
FROM FT_ARMAZENAGEM A
WHERE A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
AND A.TIPO NOT IN (2,3)

Alguém pode me ajudar?


Tente também adicionar um GROUP BY no final desses UNION
GOSTEI 0
Gérson

Gérson

03/08/2019

Bom estou realizando esse select em duas tabelas e gostaria que o retorno do campo (valortotal) vinhe-se agrupado.
Do jeito que estou fazendo ele retorna o valor só que em duas linhas.

SELECT SUM( A.VALORTOTAL )
FROM CO_CONTRATOFATURAMENTO A
WHERE A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
AND NOT A.STATUS = 6

UNION

SELECT SUM( A.VALORTOTAL )
FROM FT_ARMAZENAGEM A
WHERE A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
AND A.TIPO NOT IN (2,3)

Alguém pode me ajudar?


Tem como descrever melhor
Onde esta buscando os dados?
Como espera o resultado na saída?
Para que possa ficar mais claro, de como lhe ajudar.
GOSTEI 0
Isaque

Isaque

03/08/2019

Bom estou realizando esse select em duas tabelas e gostaria que o retorno do campo (valortotal) vinhe-se agrupado.
Do jeito que estou fazendo ele retorna o valor só que em duas linhas.

SELECT SUM( A.VALORTOTAL )
FROM CO_CONTRATOFATURAMENTO A
WHERE A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
AND NOT A.STATUS = 6

UNION

SELECT SUM( A.VALORTOTAL )
FROM FT_ARMAZENAGEM A
WHERE A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
AND NOT A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
AND A.TIPO NOT IN (2,3)

Alguém pode me ajudar?

SELECT (TABELA_CONTRATO.SOMACONTRATO (troque por sinal de mais) TABELA_ARMAZENAGEM.SOMAARMAZENAGEM) AS TOTAL
FROM (
    SELECT SUM( A.VALORTOTAL ) AS SOMACONTRATO
    FROM CO_CONTRATOFATURAMENTO A
    WHERE A.DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
    AND NOT A.DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
    AND NOT A.STATUS = 6
    ) TABELA_CONTRATO,

    (SELECT SUM( A.VALORTOTAL ) AS SOMAARMAZENAGEM
    FROM FT_ARMAZENAGEM A
    WHERE A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
    AND NOT A.DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
    AND A.TIPO NOT IN (2,3)
    ) TABELA_ARMAZENAGEM
WHERE 1=1

+
Eu não domino o UNION, veja se dessa forma vai apresentar uma soma correta


Testei e funcionou corretamente, ele retornou com a soma das duas tabelas em apenas uma linha, Muito obrigado!
GOSTEI 0
Isaque

Isaque

03/08/2019

você precisa somar as duas linhas obtidas. assim:
SELECT SUM(TOTAL) TOTALGERAL FROM
(	SELECT SUM(VALORTOTAL) TOTAL FROM CO_CONTRATOFATURAMENTO
	WHERE DATA >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1,0 )
	AND NOT DATA >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0)
	AND NOT STATUS = 6

	UNION ALL

	SELECT SUM(VALORTOTAL) FROM FT_ARMAZENAGEM
	WHERE DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1,0 )
	AND NOT DATAFECHAMENTO >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -0,0 )
	AND TIPO NOT IN (2,3)
) TAB





Muito obrigado, funcionou corretamente.
GOSTEI 1
POSTAR