Fórum problema com esta sub consulta #57776
25/01/2007
0
select r.cod_us, r.nome_us,
(select count(r1.cloro_residual) from rede2006 r1
where
r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND
r1.recoleta is null and
r1.cod_us=r.cod_us
group by r1.cod_us) as clar1,
(select count(r1.cloro_residual) from rede2006 r1
where r1.cloro_residual BETWEEN 0.2 AND 5 AND
r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND
r1.recoleta is null and
r1.cod_us=r.cod_us
group by r1.cod_us) as cldp1,
coalesce((select count(r1.cloro_residual) from rede2006 r1
where r1.cloro_residual < 0.2 [b:0a7d82073d]OR r1.cloro_residual > 5[/b:0a7d82073d] AND
r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND
r1.recoleta is null and
r1.cod_us=r.cod_us
group by r1.cod_us),0 ) as clfp1
Perguta:
se eu retirar a clausula ´OR r1.cloro_residual > 5´ ele funciona legal, mas eu quero que ele conte todos os valores <0.2 ou > 5, mas se eu fizer isso me retorna a mensagem de multiplas colunas na consulta.
Tem algum jeito de fazer isso???
Admin290
Curtir tópico
+ 0Posts
25/01/2007
Emerson Nascimento
select r.cod_us, r.nome_us, (select count(r1.cloro_residual) from rede2006 r1 where r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND r1.recoleta is null and r1.cod_us=r.cod_us) as clar1, (select count(r1.cloro_residual) from rede2006 r1 where r1.cloro_residual BETWEEN 0.2 AND 5 AND r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND r1.recoleta is null and r1.cod_us=r.cod_us) as cldp1, coalesce( (select count(r1.cloro_residual) from rede2006 r1 where r1.cloro_residual < 0.2 OR r1.cloro_residual > 5 AND r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND r1.recoleta is null and r1.cod_us=r.cod_us),0 ) as clfp1
como você pode ver, a única diferença entre as duas é a ausência do [i:ed7e2fcc1c]group by[/i:ed7e2fcc1c] nas subqueries
Gostei + 0
26/01/2007
Admin290
ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
as approximate floating-point values in SQL dialect 1, but as 64-bit.
Gostei + 0
26/01/2007
Emerson Nascimento
ao que parece não são necessárias tantas subconsultas à mesma tabela.
outra coisa: sempre que solicitar ajuda, informe o SGBD(R) utilizado e a versão do mesmo. assim podemos dar exemplos mais específicos.
Gostei + 0
26/01/2007
Admin290
As consultas estão certa, é isso mesmo, o problema é só no intervalo.
exemplo:
valores de cloro residual
01,02,03,04,05,06,07,08,09,1......5
no between 02 e 5 não tem problema
o q nao consigo fazer é achar em <02 e os >5 excluido os entre 02 e 5.
Eu nao queria fazer outra subquery para fazer separado para somar os <02 com os >5, isto funciona mas deve ter outro jeito.
Gostei + 0
26/01/2007
Emerson Nascimento
select r.cod_us, r.nome_us, count(r1.cloro_residual) as clar1, sum( (case when coalesce(r1.cloro_residual,0) BETWEEN 0.2 AND 5 then 1 else 0 end) ) as cldp1, sum( (case when coalesce(r1.cloro_residual,0) < 0.2 or coalesce(r1.cloro_residual,0) > 5 then 1 else 0 end) ) as clfp1 from tabelaprincipal r left join tabelarelacionada r1 on (r1.cod_user = r.cod_us and r1.recoleta is null) where [... AND] r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ group by r.cod_us, r.nome_us
ou
da forma original:
select r.cod_us, r.nome_us, (select count(r1.cloro_residual) from rede2006 r1 where r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND r1.recoleta is null and r1.cod_us=r.cod_us) as clar1, (select count(r1.cloro_residual) from rede2006 r1 where r1.cloro_residual BETWEEN 0.2 AND 5 AND r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND r1.recoleta is null and r1.cod_us=r.cod_us) as cldp1, coalesce( (select count(r1.cloro_residual) from rede2006 r1 where (r1.cloro_residual < 0.2 OR r1.cloro_residual > 5) AND r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ AND r1.recoleta is null and r1.cod_us=r.cod_us),0 ) as clfp1
Gostei + 0
29/01/2007
Admin290
Testei as suas modificações e nenhuma conseguiu rodar no iboconsole, uma ficou em loop (travou) e outra não reconhece alguns comandos.
Se vc estiver disponivel para ajuda, posso mandar uma copia do banco para vc (bem reduzida) ja que o fdb tem mais de 100000 registros nesta tabela.
Gostei + 0
29/01/2007
Emerson Nascimento
emerson.en@gmail.com
Gostei + 0
12/02/2007
Admin290
Estive fora do serviço por este periodo, e agora estou voltando, alguma novidade sobre esta consulta???
Gostei + 0
12/02/2007
Emerson Nascimento
select r1.cod_us, count(r1.cloro_residual) as clar1, sum( (case when coalesce(r1.cloro_residual,0) BETWEEN 0.2 AND 5 then 1 else 0 end) ) as cldp1, sum( (case when coalesce(r1.cloro_residual,0) < 0.2 or coalesce(r1.cloro_residual,0) > 5 then 1 else 0 end) ) as clfp1 from rede012006 r1 where (r1.recoleta is null) and r1.cbar_dt_coleta BETWEEN ´2006-01-01´ AND ´2006-01-31´ group by r1.cod_us
vale ressaltar que eu criei meu banco de dados com dialeto 3.
Gostei + 0
13/02/2007
Admin290
Bah, valeu ja vi q tu é o cara...
Muito Obrigado!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)