Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Buscopan

GROUP BY não exibe valor "0"

Recommended Posts

Olá Pessoal, já faz um certo tempo que estou com este problema aqui:

 

http://forum.imasters.com.br/index.php?showtopic=166204

 

Como não foi possível resolvê-lo, comecei a procurar alternativas.

 

Pensei: "Como não dá para exibir vários select count para um único group by, acho que posso fazer um select count eqpt group by setor para cada tipo de equipamento e exibir lado a lado, como se fosse uma tabela única. "

 

Ficaria assim: (obviamente que na segunda tabela eu não exibiria o setor novamente)

 

SETOR ----- CPU ---------- SETOR ------------ Monitor

A --------------3 ---------------A -------------------2

B --------------4 ---------------B -------------------4

C --------------0 ---------------C -------------------3

D --------------0 ---------------D -------------------1

E ---------------5 ---------------E -------------------5

 

Obs: Pode acontecer de o número de cpus e monitores serem diferentes

 

Qual é o problema ? o problema é que neste caso, não seriam exibidos os setores C e D na primeira parte (pois tem 0 CPUs) e ai as tabelas ficariam desalinhadas ....

 

Estou usando o seguinte código:

// Total Equipamentos por SetorSet rs_T_E_S = Server.CreateObject("ADODB.RecordSet")rs_T_E_S.Open("SELECT COUNT(*) as qtEqpt, tbl_setor.nome_setor  FROM tbl_patrimonio, tbl_setor WHERE tbl_patrimonio.cod_setor = tbl_setor.cod_setor GROUP BY nome_setor ORDER BY nome_setor"), conexao<% cTE = 1 %><% Do While not rs_T_E_S.eof %><tr><td class="table2"><% = cTE %></td><td class="table2"><% =rs_T_E_S("nome_setor")%></td><td class="table2"><% =rs_T_E_S("qtEqpt")%></td></tr><%cTE = cTE + 1rs_T_E_S.MoveNextLooprs_T_E_S.CloseSet rs_T_E_S = Nothing%>

Simples !

 

mas não está aparecendo o 0 ....

 

--------------

 

"Quando não dá certo, eu pesquiso. Se não encontrei, procuro no fórum. Se não der certo, procuro uma gambiarra. Mas quando nem a gambiarra funciona ... é fogo ..."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara queria ajudar, mas ainda nao consegui entender direito seu problema.......Me diz como é seu banco de dados (campos, tipo de valores) e oque você quer com ele......

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui tá o esquema das tabelas envolvidas no banco ...

 

http://www.republicadasmarcas.com.br/bd.htm

 

só que ...

 

a tabela patrimonio tá relacionada com a tabela de setores e de equipamento ...

 

Numa das minhas viagens eu tinha pensado em 2 Loops ...

 

X = Total de setores (1 - CRH, 2 Informatica)

Y = Total de Equipamentos (1 CPU, 2 Estabilizador, 3 Monitor ...)

 

for I de 1 até X

Response.Write("nome_setor")

---- for J de 1 ate Y

-----------rsTeste.Open("SELECT COUNT(*) AS tot WHERE cod_equipamento = J")

-----------Response.Write(rsTeste("tot"))

-----Next

Next

 

Algo que exibisse:

 

Setor --- CPU --- Mon --- Estab ...

 

etc ...

 

Para isso teria que colocar vários select count no mesmo rs ... como não consegui, resolvi fazer vários rs ... e colocá-los lado a lado ... só que ele não exibe todos os setores, só os que possuem equipamento ou o equipamento solicitado ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem outras tabelas??e quer q exiba em forma ordenada.você está relacionando uma tabela neh?você pode fazer em um Unico Select usando o UNIONe depois manda exibir o RS com o nome desejados!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for pela sua idéia de FOR, faça assim:

 

Set Rs_Setores = conexao.execute("Select cod_setor from tbl_setor order by cod_setor")While not Rs_Setores.eof--Set Rs_Equips = conexao.execute("Select * from tbl_patrimonio where cod_setor = '"& Rs_Setores("cod_setor") &"' order by cod_setor")--While not Rs_Equips.eof----arrEquips = arrEquips & Rs_Equips("cod_equipamento") & ","--Rs_Equips.MoveNext--Wend--Set Rs_Equips = nothing'Aqui você tem um array com os códigos dos equips (arrEquips).... tire do array e faça as contasresponse.write Rs_Setores("cod_setor") &"--"& Equip1 &"--"& Equip2 &"--"& Equip3arrEquips = ""Rs_Setores.MovenextwendSet Rs_Setores = nothing

Deu pra entender a lógica ? Tá uma lambança pois fiz sem testar nem nada....... deve haver modos mais eficientes e simples, mas eu desconheço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, não sei é válida está sugestão, mas não é mehor criar uma função só pra contar o que você precisar de acordo com 1 parametro e retornar o valor para uma variavel ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal ...Obrigado por tentar me ajudar ...Estes relatórios realmente estão me matando ... na verdade é a pressão dos chefões para eles sairem que está me matando ...Ultra ...Eu testei o código que você me passou e funcionou ...saiu 1 22233344, 2 55334423 e etc ... percebi que que ele mostra o código do setor e os equipamentos do setor ...Mas sem querer ser chato ... fiz pesquisa por vetor e tudo ... mas eu não consegui ler (22233344) e fazer o select count ... Será que você ou alguém poderia me ajudar ?Ele exibe o vetor ... preciso ler e fazer o select count group by ...--------Explore,Paralelo a isso que o Ultra passou também andei pesquisando a solução através do comando UNION. Peguei toda a sintaxe no manual do MySQLEx: (SELECT a FROM nome_tabela WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM nome_tabela WHERE a=11 AND B=2 ORDER BY a LIMIT 10) ORDER BY a;E estou trabalhando nisso ... De qualquer forma, depois eu posto o resultado, seja qual das maneiras funcionarem ... continuarei testando todas ...Agradeço a ajuda de vcs e peço que continuem me ajudando (por favor mesmo ...rs ...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ufa !!!!!!!!!!!!!!

 

CONSEGUI !!! (Que momento cósmico)

 

Obrigado a todo mundo que ajudou !

Ultra, Dionisio, Explore, Ursolouco e outros.

 

Estava tendo dificuldade em retirar do array, ou de trabalhar com a sintaxe do union ... que dirá fazer o select count ...

 

A solução foi fazer do jeito básico ... com Ifs (Agora vou mudar para Select Case). (adaptei do código do Ultra ...)

 

Não sei se é o melhor jeito, mas funcionou ...

 

segue abaixo o código, se interessar a alguém ...

 

Set Rs_Setores = conexao.execute("Select cod_setor, nome_setor from tbl_setor order by nome_setor")While not Rs_Setores.eofcCpu = 0cMon = 0cEst = 0	Set Rs_Equips = conexao.execute("Select * from tbl_patrimonio where cod_setor = '"& Rs_Setores("cod_setor") &"' order by cod_setor")	While not Rs_Equips.eof		if Rs_Equips("cod_equipamento") = 2 then			cCpu = cCPU + 1		end if		if Rs_Equips("cod_equipamento") = 3 then			cMon = cMon + 1		end if		if Rs_Equips("cod_equipamento") = 5 then			cEst = cEst + 1		end if		Rs_Equips.MoveNext	Wend	Set Rs_Equips = nothing%><tr><td class="table2"><% Response.Write(Rs_Setores("nome_setor")) %></td><td class="table2"><% Response.Write(cCpu) %></td><td class="table2"><% Response.Write(cMon) %></td><td class="table2"><% Response.Write(cEst) %></td></tr><%Rs_Setores.MovenextWENDSet Rs_Setores = nothing

Valeu !!!!!!!!!!!!!!!

 

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif :D :) :D :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.