Select não subtrai
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
Curtidas 0
Respostas
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.
Olhando rapidamente, você não esta agregando o valor DEVOLUCAO.DEV, o que no caso o primeiro for null resulta zero.
GOSTEI 0
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