Agrupamento por coluna específica dentre várias outras

21/10/2019

0

Olá!

Preciso fazer um agrupamento da seguinte string abaixo, sempre que for a mesma nota fiscal e o mesmo emitente,
preciso que ele agrupe em uma unica linha. Só que não estou conseguindo representar em uma unica linha pelo fato de haver
movimentações de entrada e saída, ou seja, há duas linha referente a uma unica nota fiscal.
Até tentei o group by, mas mesmo assim ele demonstra em duas linhas, pelo fato de have movimento de entrada e saída.
Como faço para agrupar em uma unica linha somando os valores?

SELECT
A.DT_TRANS,
A.CT_SALDO,
A.TIPO_TRANS,
CASE WHEN A.TIPO_TRANS="1" THEN "ENT" ELSE "SAI" END AS "Tipo",
SUM(CASE WHEN A.TIPO_TRANS="2" THEN A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM ELSE (A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM)*-1 END) AS "Valor Total",
A.NRO_DOCTO AS "Nro Docto",
A.COD_EMITENTE AS "Cod.Emitente"
FROM EMS2SFSS.MOVTO_ESTOQ A
WHERE A.NRO_DOCTO='0186563'
AND A.COD_EMITENTE='134089'
GROUP BY A.DT_TRANS,A.CT_SALDO,A.TIPO_TRANS,A.NRO_DOCTO,A.COD_EMITENTE


No exemplo dessa string acima, o valor entra e sai da conta 1271190120001, sendo assim não quero que ele apareça, mas está aparecendo.
Como faço para agrupar?
Lucas Dourado

Lucas Dourado

Responder

Posts

21/10/2019

Emerson Nascimento

deve ser algo assim:
SELECT
A.DT_TRANS,
A.CT_SALDO,
SUM(CASE WHEN A.TIPO_TRANS="1" THEN A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM ELSE (A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM)*-1 END) AS ENTRADA,
SUM(CASE WHEN A.TIPO_TRANS="2" THEN A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM ELSE (A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM)*-1 END) AS SAIDA,
A.NRO_DOCTO AS "Nro Docto",
A.COD_EMITENTE AS "Cod.Emitente"
FROM EMS2SFSS.MOVTO_ESTOQ A
WHERE A.NRO_DOCTO='0186563'
AND A.COD_EMITENTE='134089'
GROUP BY A.DT_TRANS,A.CT_SALDO,A.NRO_DOCTO,A.COD_EMITENTE

talvez CT_SALDO não deva fazer parte do retorno nem do agrupamento, mas sem alguns registros de exemplo fica complicado passar uma solução perfeita para o caso.
Responder

21/10/2019

Emerson Nascimento

ou ainda:
SELECT
A.DT_TRANS,
A.CT_SALDO,
SUM((A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM)*(CASE WHEN A.TIPO_TRANS="2" THEN  1 ELSE -1 END)) AS "Valor Total",
A.NRO_DOCTO AS "Nro Docto",
A.COD_EMITENTE AS "Cod.Emitente"
FROM EMS2SFSS.MOVTO_ESTOQ A
WHERE A.NRO_DOCTO='0186563'
AND A.COD_EMITENTE='134089'
GROUP BY A.DT_TRANS,A.CT_SALDO,A.NRO_DOCTO,A.COD_EMITENTE

Responder

21/10/2019

Emerson Nascimento

a primeira resposta, na verdade deveria ser assim:

deve ser algo assim:
SELECT
A.DT_TRANS,
A.CT_SALDO,
SUM(CASE WHEN A.TIPO_TRANS="1" THEN A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM ELSE 0 END) AS ENTRADA,
SUM(CASE WHEN A.TIPO_TRANS="2" THEN A.VALOR_MAT_M##1+A.VALOR_IPI+A.VALOR_ICM ELSE 0 END) AS SAIDA,
A.NRO_DOCTO AS "Nro Docto",
A.COD_EMITENTE AS "Cod.Emitente"
FROM EMS2SFSS.MOVTO_ESTOQ A
WHERE A.NRO_DOCTO='0186563'
AND A.COD_EMITENTE='134089'
GROUP BY A.DT_TRANS,A.CT_SALDO,A.NRO_DOCTO,A.COD_EMITENTE

talvez CT_SALDO não deva fazer parte do retorno nem do agrupamento, mas sem alguns registros de exemplo fica complicado passar uma solução perfeita para o caso.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar