Select não subtrai

Delphi

01/04/2008

Na query abaixo, preciso fazer com que no SUM principal, 1º SELECT, faça uma subtração do DEVOLUCAO.DEV e não está acontecendo. Será que são os relacionamentos?

SELECT F_PAGTO.TP_F_PAG, CASE WHEN F_PAGTO.TP_F_PAG = 1 THEN ´À VISTA´ WHEN F_PAGTO.TP_F_PAG = 2 THEN ´CARTÃO´ WHEN F_PAGTO.TP_F_PAG = 3 THEN ´CHEQUE-PRÉ´ WHEN F_PAGTO.TP_F_PAG = 4 THEN ´OUTRAS VENDAS´ END ´FORMA DE PAGAMENTO´, SUM(NF_PAGTO.VL_PAG)- COALESCE(DEVOLUCAO.DEV,0) ´VALOR´ FROM TB_SAC_NF_PAGAMENTO NF_PAGTO INNER JOIN TB_SAC_FORMA_PAGTO F_PAGTO ON(NF_PAGTO.CD_F_PAG = F_PAGTO.CD_F_PAG) INNER JOIN TB_SAC_NF_CAPEADOR CAP ON(CAP.NU_NF = NF_PAGTO.NU_NF AND CAP.NU_CX = NF_PAGTO.NU_CX AND CAP.SR_NF = NF_PAGTO.SR_NF) LEFT JOIN (SELECT CP.NU_NF, SUM(CP.VL_BRUTO + CP.VL_DESC_ACR)´DEV´ FROM TB_SAC_NF_CAPEADOR CP WHERE CP.SR_NF = ´E2´ AND CP.ST_CANC = 0 AND CP.DT_ENT BETWEEN ´29-MAR-2008´ AND ´29-MAR-2008´ GROUP BY CP.NU_NF) ´DEVOLUCAO´ ON(DEVOLUCAO.NU_NF = CAP.NU_NF) WHERE CAP.ST_CANC = 0 AND ((CAP.SR_NF = ´D2´) OR ((CAP.SR_NF = ´B2´) AND (CAP.CD_CFOP = 6102))) GROUP BY F_PAGTO.TP_F_PAG, DEVOLUCAO.DEV ORDER BY F_PAGTO.TP_F_PAG



Paulo

Paulo

Curtidas 0

Respostas

Macario

Macario

01/04/2008

Olá.

Olhando rapidamente, você não esta agregando o valor DEVOLUCAO.DEV, o que no caso o primeiro for null resulta zero.


GOSTEI 0
Paulo

Paulo

01/04/2008

Resolvi, quebrando em blocos o select e depois fazendo a subtração, assim:

SELECT DISTINCT TB_SAC_FORMA_PAGTO.TP_F_PAG, COALESCE((VENDAS.VL_PAG - DEVOLUCOES.VL_PAG),0) VL_PAG FROM TB_SAC_FORMA_PAGTO LEFT JOIN (SELECT TB_SAC_FORMA_PAGTO.TP_F_PAG, COALESCE(SUM(TB_SAC_NF_PAGAMENTO.VL_PAG),0) VL_PAG FROM TB_SAC_NF_CAPEADOR INNER JOIN TB_SAC_NF_PAGAMENTO ON (TB_SAC_NF_CAPEADOR.NU_NF = TB_SAC_NF_PAGAMENTO.NU_NF) AND (TB_SAC_NF_CAPEADOR.NU_CX = TB_SAC_NF_PAGAMENTO.NU_CX) AND (TB_SAC_NF_CAPEADOR.SR_NF = TB_SAC_NF_PAGAMENTO.SR_NF) INNER JOIN TB_SAC_FORMA_PAGTO ON (TB_SAC_NF_PAGAMENTO.CD_F_PAG = TB_SAC_FORMA_PAGTO.CD_F_PAG) WHERE (TB_SAC_NF_CAPEADOR.ST_CANC = 0) AND ((TB_SAC_NF_CAPEADOR.SR_NF = ´D2´) OR ((TB_SAC_NF_CAPEADOR.SR_NF = ´B2´) AND (TB_SAC_NF_CAPEADOR.CD_CFOP = 6102))) GROUP BY TB_SAC_FORMA_PAGTO.TP_F_PAG) VENDAS ON (TB_SAC_FORMA_PAGTO.TP_F_PAG = VENDAS.TP_F_PAG) LEFT JOIN (SELECT TB_SAC_FORMA_PAGTO.TP_F_PAG, COALESCE(SUM(TB_SAC_NF_PAGAMENTO.VL_PAG),0) VL_PAG FROM TB_SAC_NF_CAPEADOR INNER JOIN TB_SAC_NF_PAGAMENTO ON (TB_SAC_NF_CAPEADOR.NU_NF = TB_SAC_NF_PAGAMENTO.NU_NF) AND (TB_SAC_NF_CAPEADOR.NU_CX = TB_SAC_NF_PAGAMENTO.NU_CX) AND (TB_SAC_NF_CAPEADOR.SR_NF = TB_SAC_NF_PAGAMENTO.SR_NF) INNER JOIN TB_SAC_FORMA_PAGTO ON (TB_SAC_NF_PAGAMENTO.CD_F_PAG = TB_SAC_FORMA_PAGTO.CD_F_PAG) WHERE (TB_SAC_NF_CAPEADOR.ST_CANC = 0) AND (TB_SAC_NF_CAPEADOR.SR_NF = ´E2´) GROUP BY TB_SAC_FORMA_PAGTO.TP_F_PAG) DEVOLUCOES ON (TB_SAC_FORMA_PAGTO.TP_F_PAG = DEVOLUCOES.TP_F_PAG)



GOSTEI 0
POSTAR