Ajuda com Query complicada
Boa Tarde!
Desejo criar uma query, que some por mes, o valor do faturamento interno e o externo (campo VLRCTB) , sabendo-se que o que define se é interno ou externo são os CODTNS, no caso os de codigo 7102 e 7106 são faturamento externo. Eu fiz o exemplo abaixo:
SELECT sum(E660NFV.VLRCTB) as vMInterno, month(datemi) as mes ,max(datemi) as newDAta \
FROM E660NFV
WHERE E660NFV.CODEMP = :ECodEmp AND
E660NFV.CODFIL < 99 AND
E660NFV.DATEMI >= :eDatIni AND
E660NFV.DATEMI <= :eDatFim AND
CODTNS IN (''5102S'',''5102'',''5106'',''5106S'',''6102'',''6102S'',''5949'',''5124'',''5124A'',''6106S'',''6106'')
group by month(datemi) union
SELECT sum(E660NFV.VLRCTB) as vMExterno, month(datemi) as mes ,max(datemi) as newDAta \
FROM E660NFV
WHERE E660NFV.CODEMP = :ECodEmp AND
E660NFV.CODFIL < 99 AND
E660NFV.DATEMI >= :eDatIni AND
E660NFV.DATEMI <= :eDatFim AND
CODTNS IN (''7102S'',''7102'',''7106'',''7106S'')
group by month(datemi)
que me retorna:
vMInterno mes newDAta
-------------- ---------- -----------------
1146205.10 4 2013-04-25 00:00:00.000
1875919.80 5 2013-05-29 00:00:00.000
10209870.92 5 2013-05-31 00:00:00.000
11224638.86 4 2013-04-30 00:00:00.000
Acredito que esteja correto, mas eu queria uma quarta coluna pro vMExterno.
Desejo criar uma query, que some por mes, o valor do faturamento interno e o externo (campo VLRCTB) , sabendo-se que o que define se é interno ou externo são os CODTNS, no caso os de codigo 7102 e 7106 são faturamento externo. Eu fiz o exemplo abaixo:
SELECT sum(E660NFV.VLRCTB) as vMInterno, month(datemi) as mes ,max(datemi) as newDAta \
FROM E660NFV
WHERE E660NFV.CODEMP = :ECodEmp AND
E660NFV.CODFIL < 99 AND
E660NFV.DATEMI >= :eDatIni AND
E660NFV.DATEMI <= :eDatFim AND
CODTNS IN (''5102S'',''5102'',''5106'',''5106S'',''6102'',''6102S'',''5949'',''5124'',''5124A'',''6106S'',''6106'')
group by month(datemi) union
SELECT sum(E660NFV.VLRCTB) as vMExterno, month(datemi) as mes ,max(datemi) as newDAta \
FROM E660NFV
WHERE E660NFV.CODEMP = :ECodEmp AND
E660NFV.CODFIL < 99 AND
E660NFV.DATEMI >= :eDatIni AND
E660NFV.DATEMI <= :eDatFim AND
CODTNS IN (''7102S'',''7102'',''7106'',''7106S'')
group by month(datemi)
que me retorna:
vMInterno mes newDAta
-------------- ---------- -----------------
1146205.10 4 2013-04-25 00:00:00.000
1875919.80 5 2013-05-29 00:00:00.000
10209870.92 5 2013-05-31 00:00:00.000
11224638.86 4 2013-04-30 00:00:00.000
Acredito que esteja correto, mas eu queria uma quarta coluna pro vMExterno.
Jaime Daltoe
Curtidas 0
Respostas
Flavia Santos
08/08/2013
Jaime,
Passa por favor a estrutura da sua tabela, assim fica mais fácil lhe ajudarmos.
Atenciosamente,
Passa por favor a estrutura da sua tabela, assim fica mais fácil lhe ajudarmos.
Atenciosamente,
GOSTEI 0
Jaime Daltoe
08/08/2013
Eu quero valores do mesmo campo, no mesmo select, porém, quando as vendas são internas, os códigos são ''5102S'',''5102'',''5106'',''5106S'',''6102'',''6102S'',''5949'',''5124'',''5124A'',''6106S'',''6106' e quando as vendas são externas os códigos são ''7102S'',''7102'',''7106'',''7106S'' e além disso, deve haver a coluna vMInterno que vai trazer o valor mensal da venda interna e o vMExterno com a venda externa.
GOSTEI 0
David Sylvestre
08/08/2013
Se entendi corretamente, basta colocar o campo que está faltando para realizar o union.
Acredito que ele não tenha funcionado por causa dos dois selects conterem estruturas diferentes.
Segue abaixo como deveria ficar.
Acredito que ele não tenha funcionado por causa dos dois selects conterem estruturas diferentes.
Segue abaixo como deveria ficar.
SELECT sum(E660NFV.VLRCTB) AS vMInterno
, month(datemi) AS mes
, max(datemi) AS newDAta
, 0 as vMExterno
FROM E660NFV
WHERE E660NFV.CODEMP = :ECodEmp
AND E660NFV.CODFIL < 99
AND E660NFV.DATEMI >= :eDatIni
AND E660NFV.DATEMI <= :eDatFim
AND CODTNS IN ('5102S', '5102', '5106', '5106S', '6102', '6102S', '5949', '5124', '5124A', '6106S', '6106')
GROUP BY month(datemi)
UNION
SELECT 0 AS vMInterno
, month(datemi) AS mes
, max(datemi) AS newDAta
, sum(E660NFV.VLRCTB) AS vMExterno
FROM E660NFV
WHERE E660NFV.CODEMP = :ECodEmp
AND E660NFV.CODFIL < 99
AND E660NFV.DATEMI >= :eDatIni
AND E660NFV.DATEMI <= :eDatFim
AND CODTNS IN ('7102S', '7102', '7106', '7106S')
GROUP BY month(datemi)
GOSTEI 0
Alex Lekao
08/08/2013
Ola Jaime, bom dia!!!
acredito que a sugestao do David ja resolva o que vc esta querendo.
verifique e poste para a gente verificar se deu certo.
Abraco.
Alex - Lekao
acredito que a sugestao do David ja resolva o que vc esta querendo.
verifique e poste para a gente verificar se deu certo.
Abraco.
Alex - Lekao
GOSTEI 0
Jaime Daltoe
08/08/2013
David, acertou na mosca!
Obrigado pela solução!
Abraco.
Obrigado pela solução!
Abraco.
GOSTEI 0