Ajuda com Query complicada
08/08/2013
0
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
Posts
08/08/2013
Flavia Santos
Passa por favor a estrutura da sua tabela, assim fica mais fácil lhe ajudarmos.
Atenciosamente,
09/08/2013
Jaime Daltoe
09/08/2013
David Sylvestre
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)
09/08/2013
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
09/08/2013
Jaime Daltoe
Obrigado pela solução!
Abraco.
Clique aqui para fazer login e interagir na Comunidade :)