Subtração com Firebird

10 respostas
helder.emiliano
Boa tarde, eu tenho uma consulta meio extensa que me gera um valor, e outra consulta que me gera outro valor, como faço para substituir um valor pelo outro, uma vez que, separadamente elas estão funcionando Resumindo, esta consulta:
SELECT VALOR,CODIGO,NOME,SUM(VALORCOMISSIONADO) FROM
 (
select
     CONTRATO."VALORCOMISSIONADO" AS VALORCOMISSIONADO,
     META."VALOR" AS VALOR,
     AGENTE."CODIGO" AS CODIGO,
     AGENTE."NOME" AS NOME

FROM
     "AGENTE" AGENTE INNER JOIN "META" META ON AGENTE."CODIGO" = META."CODAGENTE"
     INNER JOIN "CONTRATO" CONTRATO ON AGENTE."CODIGO" = CONTRATO."AGENTE"
     INNER JOIN "BANCOS" BANCOS ON CONTRATO."BANCO" = BANCOS."CODIGO"
     INNER JOIN "FINANCEIRA" FINANCEIRA ON BANCOS."FINANCEIRA" = FINANCEIRA."CODIGO"
     INNER JOIN "TIPO" TIPO ON BANCOS."TIPO" = TIPO."CODIGO"
WHERE
     AGENTE."ATIVO" LIKE 'S'
AND AGENTE."TIPOAGENTE" LIKE '5'
AND FINANCEIRA."CODIGO" LIKE '1'
AND TIPO."GRUPO" LIKE '4'
AND CONTRATO."AGENTESECUNDARIO" NOT LIKE '22'
AND CONTRATO."STATUSAP" LIKE '6'
AND AGENTE."CODIGO" LIKE '261'
union all
SELECT
     CONTRATO."VALORCOMISSIONADO" AS VALORCOMISSIONADO,
     META."VALOR" AS VALOR,
     AGENTE."CODIGO" AS CODIGO,
     AGENTE."NOME" AS NOME
FROM
     "AGENTE" AGENTE INNER JOIN "META" META ON AGENTE."CODIGO" = META."CODAGENTE"
     INNER JOIN "CONTRATO" CONTRATO ON AGENTE."CODIGO" = CONTRATO."AGENTE"
     INNER JOIN "BANCOS" BANCOS ON CONTRATO."BANCO" = BANCOS."CODIGO"
     INNER JOIN "FINANCEIRA" FINANCEIRA ON BANCOS."FINANCEIRA" = FINANCEIRA."CODIGO"
     INNER JOIN "TIPO" TIPO ON BANCOS."TIPO" = TIPO."CODIGO"
WHERE
     AGENTE."ATIVO" LIKE 'S'
  AND AGENTE."TIPOAGENTE" LIKE '5'
 AND FINANCEIRA."CODIGO" LIKE '1'
 AND TIPO."GRUPO" LIKE '4'
 AND CONTRATO."AGENTESECUNDARIO" LIKE '22'
 AND CONTRATO."STATUSAP" LIKE '6'
AND AGENTE."CODIGO" LIKE '261'
union all
SELECT
     CONTRATO."VALORCOMISSIONADO" AS VALORCOMISSIONADO,
     META."VALOR" AS VALOR,
     AGENTE."CODIGO" AS CODIGO,
     AGENTE."NOME" AS NOME
FROM
     "AGENTE" AGENTE INNER JOIN "META" META ON AGENTE."CODIGO" = META."CODAGENTE"
     INNER JOIN "CONTRATO" CONTRATO ON AGENTE."CODIGO" = CONTRATO."AGENTE"
     INNER JOIN "BANCOS" BANCOS ON CONTRATO."BANCO" = BANCOS."CODIGO"
     INNER JOIN "FINANCEIRA" FINANCEIRA ON BANCOS."FINANCEIRA" = FINANCEIRA."CODIGO"
     INNER JOIN "TIPO" TIPO ON BANCOS."TIPO" = TIPO."CODIGO"
WHERE
     AGENTE."ATIVO" LIKE 'S'
  AND AGENTE."TIPOAGENTE" LIKE '5'
 AND FINANCEIRA."CODIGO" NOT LIKE '1'
 AND TIPO."GRUPO" LIKE '4'
 AND CONTRATO."AGENTESECUNDARIO" IS NULL
 AND CONTRATO."STATUSAP" LIKE '6'
AND AGENTE."CODIGO" LIKE '261'
   )

GROUP BY
VALOR,
CODIGO,
NOME
Menos esta:
SELECT VALOR,CODIGO,NOME,SUM(VALORCOMISSIONADO) FROM
 (
select
     CONTRATO."VALORCOMISSIONADO" AS VALORCOMISSIONADO,
     META."VALOR" AS VALOR,
     AGENTE."CODIGO" AS CODIGO,
     AGENTE."NOME" AS NOME

FROM
     "AGENTE" AGENTE INNER JOIN "META" META ON AGENTE."CODIGO" = META."CODAGENTE"
     INNER JOIN "CONTRATO" CONTRATO ON AGENTE."CODIGO" = CONTRATO."AGENTE"
     INNER JOIN "BANCOS" BANCOS ON CONTRATO."BANCO" = BANCOS."CODIGO"
     INNER JOIN "FINANCEIRA" FINANCEIRA ON BANCOS."FINANCEIRA" = FINANCEIRA."CODIGO"
     INNER JOIN "TIPO" TIPO ON BANCOS."TIPO" = TIPO."CODIGO"
WHERE
     AGENTE."ATIVO" LIKE 'S'
AND AGENTE."TIPOAGENTE" LIKE '5'
AND FINANCEIRA."CODIGO" LIKE '1'
AND TIPO."GRUPO" LIKE '4'
AND CONTRATO."AGENTESECUNDARIO" NOT LIKE '22'
AND CONTRATO."STATUSAP" LIKE '6'
AND AGENTE."CODIGO" LIKE '261'


union all
SELECT
     CONTRATO."VALORCOMISSIONADO" AS VALORCOMISSIONADO,
     META."VALOR" AS VALOR,
     AGENTE."CODIGO" AS CODIGO,
     AGENTE."NOME" AS NOME
FROM
     "AGENTE" AGENTE INNER JOIN "META" META ON AGENTE."CODIGO" = META."CODAGENTE"
     INNER JOIN "CONTRATO" CONTRATO ON AGENTE."CODIGO" = CONTRATO."AGENTE"
     INNER JOIN "BANCOS" BANCOS ON CONTRATO."BANCO" = BANCOS."CODIGO"
     INNER JOIN "FINANCEIRA" FINANCEIRA ON BANCOS."FINANCEIRA" = FINANCEIRA."CODIGO"
     INNER JOIN "TIPO" TIPO ON BANCOS."TIPO" = TIPO."CODIGO"
WHERE
     AGENTE."ATIVO" LIKE 'S'
 AND AGENTE."TIPOAGENTE" LIKE '5'
 AND FINANCEIRA."CODIGO" NOT LIKE '1'
 AND TIPO."GRUPO" LIKE '4'
 AND CONTRATO."AGENTESECUNDARIO" IS NULL
 AND ((CONTRATO."STATUSAP" LIKE '1')
     or (CONTRATO."STATUSAP" LIKE '2')
     or (CONTRATO."STATUSAP" LIKE '4')
     or (CONTRATO."STATUSAP" LIKE '5')
     or (CONTRATO."STATUSAP" LIKE '7'))
AND AGENTE."CODIGO" LIKE '261'
   )

GROUP BY
VALOR,
CODIGO,
NOME
Como faço para juntá-las e fazer esta subtração?

10 Respostas

TheKill

Desconheço uma forma de fazer isso…

Você quer pra usar no iReport certo?
Como havia mensionado o correto é utilizar Collections
para resolver esse seu problema ^^

helder.emiliano

olha thekill eu acredito que seja possivel sim, no ireport eu resolvi com tabelas,cada uma com um dataset das minhas 12 colunas, dez ja estão prontas acho que seria algo semelhante a este tópico de outro fórum, só não consegui encaixar ainda
http://social.msdn.microsoft.com/Forums/pt-BR/520/thread/a8b37af1-9832-4136-b9f4-4ac2892f7035

TheKill

sub querys sao totalmente diferente…

vc nao consegue trazer várias linhas em uma subQuery… Vai conseguir trazer 1 linha. Se isso resolve pra vc entao use subQuery e tudo feito :wink:

helder.emiliano

então, é exatamente o que eu preciso de uma linha com o resultado da subtração: query1-query2, vc acha q seria possivel com subquerys?

TheKill

É como eu falei. o SQL1 traz 1 linha?

helder.emiliano

sim e o sql 2 tbem traz uma linha agora eu queria subtrair um resultado pelo outro

TheKill

faz 1 SQL dentro do outro… eu nao tenho exemplo aqui, mas se tu pesquisar vai achar como fazer…
ai é só diminuir um pelo outro dentro do mesmo sql

TheKill

Mas sinceramente não entendo pra que passar trabalho.

É só usar Collection. usa Objeto -.-

helder.emiliano

eu pesquisei quando vc me fez esta sugestão, o problema é que não achei nem um exemplo prático que me auxiliasse, e como estou começando agora, não conseguiria fazer isto sozinho :oops:

TheKill

Basicamente é isso

select nome
from pessoas
where pessoa = viagens.cd_motorista) as nome_motorista,
cd_paciente,
(select nome
from pessoas
where pessoa = viagens.cd_paciente ) as nome_paciente,
from viagens
Criado 18 de janeiro de 2011
Ultima resposta 18 de jan. de 2011
Respostas 10
Participantes 2