Merge entre dois selects

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

tenho dois selects:

Selecionar tudo

select z.cod,l.nom,count(s.cod)
from tab1 z,tab2 l,tab3 s
where s.codz = z.cod and
          s.codl = l.cod
group by z.cod,l.nom;

Selecionar tudo

select z.cod,l.nom,count(x.cod),sum(x.qtd)
from tab1 z,tab2 l,tab3 x
where x.codz = z.cod and
          x.codl = l.cod
group by z.cod,l.nom;
Gostaria de fazer um mereg enter os dois selects para exibir os resultados da seguinte forma:

z.cod l.nom count(s.cod) count(x.cod) sum(x.qtd)
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Não ficou muito claro o que você precisa..

Da forma que está, a única diferença entre as duas queries é que uma mostra o SUM do campo tab3.qtd... todas as demais condições estão iguais..

Você queria o que exatamente? Mostrar duas vezes cada linha, uma com o sum e outra sem?

Se for o caso, basta adicionar uma coluna null na primeira consulta e usar o union all:

Selecionar tudo

select z.cod, l.nom, count(s.cod), to_number(null) sum_x_qtd
from   tab1 z, tab2 l, tab3 s
where s.codz = z.cod
and    s.codl = l.cod
group by z.cod, l.nom
union all
select z.cod, l.nom, count(x.cod), sum(x.qtd) sum_x_qtd
from   tab1 z, tab2 l, tab3 x
where x.codz = z.cod
and    x.codl = l.cod
group by z.cod, l.nom
;
ou lendo as tabelas apenas uma vez:

Selecionar tudo

select a.cod, a.nom, a.count_x_cod, decode( d.lvl, 1, null, a.sum_x_qtd ) sum_x_qtd
from
(
  select z.cod, l.nom, count(x.cod) count_x_cod, sum(x.qtd) sum_x_qtd
  from   tab1 z, tab2 l, tab3 x
  where x.codz = z.cod
  and    x.codl = l.cod
  group by z.cod, l.nom
) a
, (select level lvl from dual connect by level <= 2) d
;
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Não ficou claro, é verdade.

O correto dos selects seria:

select z.cod,l.nom,count(s.cod)
from tab1 z,tab2 l,tab3 s
where s.codz = z.cod and
s.codl = l.cod
group by z.cod,l.nom;

select z.cod,l.nom,count(x.cod),sum(x.qtd)
from tab1 z,tab2 l,tab4 x
where x.codz = z.cod and
x.codl = l.cod
group by z.cod,l.nom;

No primeiro select seria um count na table tab3 e no segundo select teríamos um count na table tab4 e o somatório da coluna qtd da tabela 4

Gostaria de unir os 2 selects para que cada linha do select seja assim:

z.cod,l.nom,count(s.cod),count(x.cod),sum(x.qtd)

Ficou mais claro? As sugestões apresentadas me atenderiam?
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Tenta aí

Selecionar tudo

select z.cod,
l.nom,
count(s.cod) over (partition by z.cod, l.nom), 
count(x.cod) over (partition by z.cod, l.nom), 
sum(x.qtd) over (partition by z.cod, l.nom) 
from tab1 z,tab2 l,tab3 s, tab4 x 
where s.codz = z.cod and 
s.codl = l.cod and
x.codl = l.cod 
lailton.montenegro
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Seg, 30 Ago 2010 9:44 am
Localização: RN

Amigos,

estou com uma duvida parecida aqui.

seguinte tenho duas consultas...
a 1°

Selecionar tudo

select distinct pcboletocli.codcli as Cliente, 
  count(pcboletocli.nossonumbco) as Qtd_Lançada 
from pcboletocli
group by 
pcboletocli.codcli
a 2°

Selecionar tudo

select 
distinct pcpedctemp.codcli as cli,
count(pcpedctemp.OBSINTEGRACAO2) as QtdBAixada
from pcpedctemp
where 
 pcpedctemp.integradora = 2 and
 pcpedctemp.importado = 'S'
 group by 
pcpedctemp.codcli;
o que eu quero é o seguinte....

colocar as duas consultas juntas (já tentei o union) talvez fosse com um select sobre outro, so que queria que o mostrasse a subtração entre QTd_lançada e QtdBAixada....

o resultado seria aasim

pcboletocli.codcli, Qtd_Lançada, (Qtd_Lançada - QtdBAixada)
1526 , 20 , 10 (levando em consideraçao que a QtdBAixada = 10)

se puderem me ajudar... eu agradeço!!!!


____________________
Lailton Montenegro
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 23 visitantes