Select count dentro de uma clausula where ou no left join
Oi sou novato e estou encontrando problemas em um sql
explicando pra melhor entender
possuo tabela pessoa, movimentocongregacao,congregacao, caixa
preciso listar mensalmente o valor total do caixa no periodo de um ano, acontece que preciso separar por congregacao
no movimentocongregacao eu tenho data inclusa e exclusao
entao comparando com a data do caixa eu sei qual a congregacao que estava no dia do caixa e consigo fazer normalmente
acontece que se pessoa nao teve movimentocongregacao eu nao consigo, selecionar apenas os que o count do movimentocongregacao é = zero, alguem poderia me ajudar????
obrigado...
Jorge Meneses
Curtidas 0
Respostas
Emerson Nascimento
07/07/2010
publique a instrução que você utilizou.
GOSTEI 0
Jorge Meneses
07/07/2010
o primeiro pega quem na data do caixa estava ativo em alguma congregacao
apos union all pega quem na epoca estava em alguma congregacao
como falei antes problema é pegar que nao teve congregacao e quem na epoca do caixa nao estava em nenhuma congregacao
select distinct en.nome nomeigreja,co.nome as congregacao,co.codigo,li.nome lider,pe.nome,pe.sexo,pe.membro,ct.nome conta,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 1 and year (ca.data) = 2010)JAN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 2 and year (ca.data) = 2010)FEV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 3 and year (ca.data) = 2010)MAR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 4 and year (ca.data) = 2010)ABR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 5 and year (ca.data) = 2010)MAI,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 6 and year (ca.data) = 2010)JUN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 7 and year (ca.data) = 2010)JUL,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 8 and year (ca.data) = 2010)AGO,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 9 and year (ca.data) = 2010)SEP,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 10 and year (ca.data) = 2010)OCT,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 11 and year (ca.data) = 2010)NOV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 12 and year (ca.data) = 2010)DEZ,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and year (ca.data) = 2010)Total
from dbo.caixa ca
left join dbo.congregacaomovimento cm on cm.codpessoa = ca.cliente
and (ca.data >= cm.datainclusao and cm.dataexclusao is null)
left join pessoa pe on pe.codigo = cm.codpessoa
left join congregacao co on co.codigo = cm.codcongregacao
left join entidade en on en.codigo = ca.codentidade
left join caixaconta cc on cc.caixaconta = ca.codigo
left join conta ct on ct.codigo = cc.codconta
inner join parametros pa on pa.contapadraodizimo = ct.codigo
left join celulaintegrante ci on ci.codpessoa = pe.codigo
left join celula ce on ce.codigo = ci.codcelula
left join pessoa li on li.codigo = ce.lider
where cm.codentidade = 15 union all select distinct en.nome nomeigreja,co.nome as congregacao,co.codigo,li.nome lider,pe.nome,pe.sexo,pe.membro,ct.nome conta,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 1 and year (ca.data) = 2010)JAN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 2 and year (ca.data) = 2010)FEV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 3 and year (ca.data) = 2010)MAR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 4 and year (ca.data) = 2010)ABR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 5 and year (ca.data) = 2010)MAI,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 6 and year (ca.data) = 2010)JUN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 7 and year (ca.data) = 2010)JUL,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 8 and year (ca.data) = 2010)AGO,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 9 and year (ca.data) = 2010)SEP,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 10 and year (ca.data) = 2010)OCT,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 11 and year (ca.data) = 2010)NOV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 12 and year (ca.data) = 2010)DEZ,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and year (ca.data) = 2010)Total from dbo.caixa ca
left join dbo.congregacaomovimento cm on cm.codpessoa = ca.cliente
and (ca.data >= cm.datainclusao and ca.data <= cm.dataexclusao)
left join pessoa pe on pe.codigo = cm.codpessoa
left join congregacao co on co.codigo = cm.codcongregacao
left join entidade en on en.codigo = ca.codentidade
left join caixaconta cc on cc.caixaconta = ca.codigo
left join conta ct on ct.codigo = cc.codconta
inner join parametros pa on pa.contapadraodizimo = ct.codigo
left join celulaintegrante ci on ci.codpessoa = pe.codigo
left join celula ce on ce.codigo = ci.codcelula
left join pessoa li on li.codigo = ce.lider where cm.codentidade = 15
order by co.nome,li.nome,pe.nome
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 1 and year (ca.data) = 2010)JAN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 2 and year (ca.data) = 2010)FEV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 3 and year (ca.data) = 2010)MAR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 4 and year (ca.data) = 2010)ABR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 5 and year (ca.data) = 2010)MAI,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 6 and year (ca.data) = 2010)JUN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 7 and year (ca.data) = 2010)JUL,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 8 and year (ca.data) = 2010)AGO,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 9 and year (ca.data) = 2010)SEP,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 10 and year (ca.data) = 2010)OCT,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 11 and year (ca.data) = 2010)NOV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 12 and year (ca.data) = 2010)DEZ,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and year (ca.data) = 2010)Total
from dbo.caixa ca
left join dbo.congregacaomovimento cm on cm.codpessoa = ca.cliente
and (ca.data >= cm.datainclusao and cm.dataexclusao is null)
left join pessoa pe on pe.codigo = cm.codpessoa
left join congregacao co on co.codigo = cm.codcongregacao
left join entidade en on en.codigo = ca.codentidade
left join caixaconta cc on cc.caixaconta = ca.codigo
left join conta ct on ct.codigo = cc.codconta
inner join parametros pa on pa.contapadraodizimo = ct.codigo
left join celulaintegrante ci on ci.codpessoa = pe.codigo
left join celula ce on ce.codigo = ci.codcelula
left join pessoa li on li.codigo = ce.lider
where cm.codentidade = 15 union all select distinct en.nome nomeigreja,co.nome as congregacao,co.codigo,li.nome lider,pe.nome,pe.sexo,pe.membro,ct.nome conta,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 1 and year (ca.data) = 2010)JAN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 2 and year (ca.data) = 2010)FEV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 3 and year (ca.data) = 2010)MAR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 4 and year (ca.data) = 2010)ABR,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 5 and year (ca.data) = 2010)MAI,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 6 and year (ca.data) = 2010)JUN,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 7 and year (ca.data) = 2010)JUL,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 8 and year (ca.data) = 2010)AGO,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 9 and year (ca.data) = 2010)SEP,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 10 and year (ca.data) = 2010)OCT,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 11 and year (ca.data) = 2010)NOV,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and month (ca.data) = 12 and year (ca.data) = 2010)DEZ,
(select sum (cc.valor) from caixaconta cc where cc.caixaconta = ca.codigo and year (ca.data) = 2010)Total from dbo.caixa ca
left join dbo.congregacaomovimento cm on cm.codpessoa = ca.cliente
and (ca.data >= cm.datainclusao and ca.data <= cm.dataexclusao)
left join pessoa pe on pe.codigo = cm.codpessoa
left join congregacao co on co.codigo = cm.codcongregacao
left join entidade en on en.codigo = ca.codentidade
left join caixaconta cc on cc.caixaconta = ca.codigo
left join conta ct on ct.codigo = cc.codconta
inner join parametros pa on pa.contapadraodizimo = ct.codigo
left join celulaintegrante ci on ci.codpessoa = pe.codigo
left join celula ce on ce.codigo = ci.codcelula
left join pessoa li on li.codigo = ce.lider where cm.codentidade = 15
order by co.nome,li.nome,pe.nome
GOSTEI 0
Emerson Nascimento
07/07/2010
torne a tabela pessoa a tabela principal da sua instrução.
algo assim:
select
en.nome nomeigreja, co.nome congregacao, co.codigo,
li.nome lider, pe.nome, pe.sexo, pe.membro, ct.nome conta,
sum(case when month(ca.data) = 1 then cc.valor else 0 end) JAN,
sum(case when month(ca.data) = 2 then cc.valor else 0 end) FEV,
sum(case when month(ca.data) = 3 then cc.valor else 0 end) MAR,
sum(case when month(ca.data) = 4 then cc.valor else 0 end) ABR,
sum(case when month(ca.data) = 5 then cc.valor else 0 end) MAI,
sum(case when month(ca.data) = 6 then cc.valor else 0 end) JUN,
sum(case when month(ca.data) = 7 then cc.valor else 0 end) JUL,
sum(case when month(ca.data) = 8 then cc.valor else 0 end) AGO,
sum(case when month(ca.data) = 9 then cc.valor else 0 end) SEP,
sum(case when month(ca.data) = 10 then cc.valor else 0 end) OCT,
sum(case when month(ca.data) = 11 then cc.valor else 0 end) NOV,
sum(case when month(ca.data) = 12 then cc.valor else 0 end) DEZ,
sum(cc.valor) TOTAL
from pessoa pe
left join dbo.caixa ca on ca.cliente = pe.codigo
and ca.data between '01.01.2010' and '31.12.2010'
left join dbo.congregacaomovimento cm on cm.codpessoa = pe.codpessoa
and cm.datainclusao >= ca.data and cm.dataexclusao is null
left join congregacao co on co.codigo = cm.codcongregacao
left join entidade en on en.codigo = ca.codentidade
left join caixaconta cc on cc.caixaconta = ca.codigo
left join conta ct on ct.codigo = cc.codconta
inner join parametros pa on pa.contapadraodizimo = ct.codigo
left join celulaintegrante ci on ci.codpessoa = pe.codigo
left join celula ce on ce.codigo = ci.codcelula
left join pessoa li on li.codigo = ce.lider
where cm.codentidade = 15
group by
en.nome, co.nome, co.codigo,
li.nome, pe.nome, pe.sexo, pe.membro, ct.nome
algo assim:
select
en.nome nomeigreja, co.nome congregacao, co.codigo,
li.nome lider, pe.nome, pe.sexo, pe.membro, ct.nome conta,
sum(case when month(ca.data) = 1 then cc.valor else 0 end) JAN,
sum(case when month(ca.data) = 2 then cc.valor else 0 end) FEV,
sum(case when month(ca.data) = 3 then cc.valor else 0 end) MAR,
sum(case when month(ca.data) = 4 then cc.valor else 0 end) ABR,
sum(case when month(ca.data) = 5 then cc.valor else 0 end) MAI,
sum(case when month(ca.data) = 6 then cc.valor else 0 end) JUN,
sum(case when month(ca.data) = 7 then cc.valor else 0 end) JUL,
sum(case when month(ca.data) = 8 then cc.valor else 0 end) AGO,
sum(case when month(ca.data) = 9 then cc.valor else 0 end) SEP,
sum(case when month(ca.data) = 10 then cc.valor else 0 end) OCT,
sum(case when month(ca.data) = 11 then cc.valor else 0 end) NOV,
sum(case when month(ca.data) = 12 then cc.valor else 0 end) DEZ,
sum(cc.valor) TOTAL
from pessoa pe
left join dbo.caixa ca on ca.cliente = pe.codigo
and ca.data between '01.01.2010' and '31.12.2010'
left join dbo.congregacaomovimento cm on cm.codpessoa = pe.codpessoa
and cm.datainclusao >= ca.data and cm.dataexclusao is null
left join congregacao co on co.codigo = cm.codcongregacao
left join entidade en on en.codigo = ca.codentidade
left join caixaconta cc on cc.caixaconta = ca.codigo
left join conta ct on ct.codigo = cc.codconta
inner join parametros pa on pa.contapadraodizimo = ct.codigo
left join celulaintegrante ci on ci.codpessoa = pe.codigo
left join celula ce on ce.codigo = ci.codcelula
left join pessoa li on li.codigo = ce.lider
where cm.codentidade = 15
group by
en.nome, co.nome, co.codigo,
li.nome, pe.nome, pe.sexo, pe.membro, ct.nome
GOSTEI 0
Jorge Meneses
07/07/2010
Oi Emerson, acho que vc nao entendeu, esse que postei esta funcionando, mas sao pessoas que tem congregacaomovimento
o meu problema é listar apenas pessoa que nao teve congregacaomovimento
nesse caso imagino que teria que ter
um select pe.pessoa,count (cm.codpessoa) cujo having count (cm.pessoa)=0
ai entao eu listo apenas quem nao tem movimento, problema é que ja testei em tudo que é lugar e nao consegui rsrsrs
mas é como te disse sou novato, vai ver eu que nao te entendi rsrsrs
GOSTEI 0
Emerson Nascimento
07/07/2010
e se você trocar
inner join parametros pa on pa.contapadraodizimo = ct.codigo
por
left join parametros pa on pa.contapadraodizimo = ct.codigo
inner join parametros pa on pa.contapadraodizimo = ct.codigo
por
left join parametros pa on pa.contapadraodizimo = ct.codigo
GOSTEI 0