Como Somar Por Tipo?

Oracle

26/09/2006

Pessoal to precisando somar os itens de um pedido onde,

N - Normal
X - Excluido
D - Desconto

só que neste meu select tá somando tudo, o que preciso seria Somar ´N´, desconsiderar ´X´ e Subtrair ´D´.

Alguém sabe como fazer?

SELECT LOJA, EMPRESA, SUM(VALOR), SUM(VALORCOMISSAO), SUM(VALORLIQUIDO)
FROM TabelaItens TI, TabelaHeaders TH
WHERE TI.codfatura in
(SELECT codFatura from TabelaHeaders THX
WHERE THX.codfechamento = 1 AND
FTHX.fth_estado = ´F´) AND
TH.codfatura = TI.codfatura AND
TI.fti_TipoLanc in (´N´,´X´,´D´)
GROUP BY TI_LOJA, TH_EMPRESA
ORDER BY TI_LOJA, TH_EMPRESA


Wgm8

Wgm8

Curtidas 0

Respostas

Rosterne

Rosterne

26/09/2006

Tenta assim:

SELECT LOJA, EMPRESA, SUM(VALOR) - SUM(T.VALOR), SUM(VALORCOMISSAO) - SUM(T.VALORCOMISSAO), SUM(VALORLIQUIDO) - SUM(T.VALORLIQUIDO)
FROM TabelaItens TI,
TabelaHeaders TH,
(
SELECT LOJA, EMPRESA, VALOR, VALORCOMISSAO, VALORLIQUIDO
FROM TabelaItens TI, TabelaHeaders TH
WHERE TI.codfatura in
(SELECT codFatura from TabelaHeaders THX
WHERE THX.codfechamento = 1 AND
FTHX.fth_estado = ´F´) AND
TH.codfatura = TI.codfatura AND
TI.fti_TipoLanc = (´D´)
) T
WHERE TI.codfatura in
(SELECT codFatura from TabelaHeaders THX
WHERE THX.codfechamento = 1 AND
FTHX.fth_estado = ´F´) AND
TH.codfatura = TI.codfatura AND
TI.fti_TipoLanc = (´N´)
GROUP BY TI_LOJA, TH_EMPRESA
ORDER BY TI_LOJA, TH_EMPRESA;


GOSTEI 0
Wgm8

Wgm8

26/09/2006

Esta dando a seguinte mensagem coluna definida de maneira ambígua. O que pode ser?


GOSTEI 0
Rosterne

Rosterne

26/09/2006

coloque o nome da tabela ou o ´alias´ da tabela que o campo pertence na query.

Ex:

SELECT TH.LOJA, TH.EMPRESA, SUM(VALOR) - SUM(T.VALOR) ...


Abraço.


GOSTEI 0
Wgm8

Wgm8

26/09/2006

coloquei apenas 1 campo de soma, porem continua dando o erro coluna definida de maneira ambigua ,lá onde marquei.

SELECT FTI_CODLOJA, FTH_CODEMPRESA,
SUM(FTI_VALOR) - SUM(T.FTI_VALOR)
FROM FATURAI FTI,
FATURAH FTH,
(
SELECT FTI_CODLOJA, FTH_CODEMPRESA, FTI_VALOR
FROM FATURAI FTI, FATURAH FTH
WHERE FTI.fti_codfatura in
(SELECT fth_codFatura from FATURAH FTHX
WHERE FTHX.fth_codfechamento = 93 AND
FTHX.fth_estado = ´F´) AND
FTH.fth_codfatura = FTI.fti_codfatura AND
FTI.fti_TipoLanc in (´T´)
) T
WHERE FTI.fti_codfatura in
(SELECT fth_codFatura from FATURAH FTHX
WHERE FTHX.fth_codfechamento = 93 AND
FTHX.fth_estado = ´F´) AND
FTH.fth_codfatura = FTI.fti_codfatura AND
FTI.fti_TipoLanc in (´D´)
GROUP BY FTI_CODLOJA, [color=red:5b10262f82]FTH_CODEMPRESA [/color:5b10262f82]
ORDER BY FTI_CODLOJA, FTH_CODEMPRESA


GOSTEI 0
Rosterne

Rosterne

26/09/2006

wgm8,

como falei coloque o nome da tabela ou o ´alias´ da tabela que o campo pertence na query, isso vale não somente para os campos na claúsula SELECT.

Essa query tem dois select´s com o mesmo nome, repare na sbquery que os campos FTI_CODLOJA, FTH_CODEMPRESA etc repetem.

o nome da tabela ou seu ´Alias´ é seprado por ´,´ e não ´_´.

Formato: ´NOMEDATABELA.NOMEDOCAMPO.´


Seria algo assim, mas confira se os campos estão conforme as tabelas a que eles pertencem.

Ex:

SELECT TI.LOJA, TH.EMPRESA, SUM(TI.VALOR) - SUM(T.VALOR), SUM(TI.VALORCOMISSAO) - SUM(T.VALORCOMISSAO), SUM(TI.VALORLIQUIDO) - SUM(T.VALORLIQUIDO)
FROM TabelaItens TI,
TabelaHeaders TH,
(
SELECT LOJA, EMPRESA, VALOR, VALORCOMISSAO, VALORLIQUIDO
FROM TabelaItens TI, TabelaHeaders TH
WHERE TI.codfatura in
(SELECT codFatura from TabelaHeaders THX
WHERE THX.codfechamento = 1 AND
FTHX.fth_estado = ´F´) AND
TH.codfatura = TI.codfatura AND
TI.fti_TipoLanc = (´D´)
) T
WHERE TI.codfatura in
(SELECT codFatura from TabelaHeaders THX
WHERE THX.codfechamento = 1 AND
FTHX.fth_estado = ´F´) AND
TH.codfatura = TI.codfatura AND
TI.fti_TipoLanc = (´N´)
GROUP BY TI.LOJA, TH.EMPRESA
ORDER BY TI.LOJA, TH.EMPRESA;


Abraço.


GOSTEI 0
POSTAR