Jump to content


Photo

Função Distinct Em Access


  • Faça o login para participar
28 replies to this topic

#1 TucaZ

TucaZ

    Normal

  • Usuários
  • 99 posts
  • Sexo:Não informado

Posted 17/10/2004, 22:50

Como não tem um fórum especifíco de BD vou postar aqui! :)

Estou com um problema com algo que alguém algum dia chamou de banco de dados. Eu acostumado a trabalhar com banco de dados decente (SQL Server e MySQL) peguei um trabalinho simples, mas que não acabei ainda porque a porcaria do Access não deixou.

Estou usando um DISTINCT dentro de uma função COUNT.

SELECT COUNT(DISTINCT campo) AS total FROM tabela

SQL Server e MySQL suportam esta instrução, mas pelo que estou vendo o Access não faz o mesmo. Será que alguém conhece algo que substitua essa função neste software tão limitado? Não quero ter que fazer o distinct na mão através do ASP.

Abraços

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 17/10/2004, 22:54

Você pode arriscar assim:

SELECT COUNT(SELECT DISTINCT Campo FROM Tabela) AS Total
Quando a seção de banco de dados, tem sim. Por falar nisso, movido pra lá.

#3 TucaZ

TucaZ

    Normal

  • Usuários
  • 99 posts
  • Sexo:Não informado

Posted 18/10/2004, 00:17

Hmm... além de ter problemas com Access estou com problemas também com as vistas. Não vi o fórum! :P

LeoB, valeu a tentativa, mas não funciona também.

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 18/10/2004, 00:24

É, agora testei aqui e também não foi. Se é ASP, por que você não seleciona com o DISTINCT e pega a quantidade com um Rs.Recordcount?

#5 TucaZ

TucaZ

    Normal

  • Usuários
  • 99 posts
  • Sexo:Não informado

Posted 18/10/2004, 11:00

É, agora testei aqui e também não foi. Se é ASP, por que você não seleciona com o DISTINCT e pega a quantidade com um Rs.Recordcount?

Porque não é só isso que a consulta tem que me retornar.
Eu tenho uma tabela que já foi modelada de um jeito gambiarrado que tem Usuário e Data. Ela loga a data que os usuários fizeram login no sistema.

Eu preciso gerar um relatório dizendo quando usuários logaram numa determinada data e o Distinct entra porque eu não posso repetir os usuários.

Abraços

#6 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 18/10/2004, 11:03

Poisé... é pq Banco de Dados é escondido, pro povo num achar...

http://forum.wmonlin...hp?showforum=51
------
Mero mortal!

#7 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 18/10/2004, 11:07

Veja se esta instrução da certo... altere os campos de acordo com as suas necessidades.

select max(data) as ultimoacesso, count(*) as totalacessos, usuario from logacessos group by usuario

------
Mero mortal!

#8 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 18/10/2004, 12:06

Deu certo TucaZ ???
------
Mero mortal!

#9 TucaZ

TucaZ

    Normal

  • Usuários
  • 99 posts
  • Sexo:Não informado

Posted 18/10/2004, 13:17

Não serve pra min, Prog e de qualquer forma não iria funcionar, pois o não se pode usar (*) em funções.

Eu não preciso apenas do última dia, mas sim de todos. Seria um log de acesso.

Vou exemplificar o banco de dados

user data
prog 12/10/2004 15:40
prog 12/10/2004 12:50
tucaz 12/10/2004 15:00
prog 12/10/2004 15:40
prog 12/10/2004 18:00
tucaz 13/10/2004 15:00
tucaz 13/10/2004 18:00
prog 13/10/2004 18:00
joao 13/10/2004 17:20

Nesse caso eu deveria ter um resultado assim

Total Data
2 12/10/2004
3 13/10/2004

Por esse motivo eu preciso do distinct. Se fosse qualquer outro banco diferente da porcaria do Access isso já teria sido feito.

Abraços

#10 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 18/10/2004, 13:46

Então a sua pergunta que não esta muito correta, deixa eu ver se entendi... Vc quer listar o dia com a quantidade de acessos dakele usuário... ou acessos de qualquer usuário??

E quem foi que lhe disse que não pode usar * em funções? Acho que o correto é "em algumas funções".

Lista todos os acessos por dia, sem relação com usuário:
select count(*) as totalacessos, Format(Data,'dd/mm/yyyy') from logacessos group by Format(Data,'dd/mm/yyyy')

Lista todos os acessos por dia, de um determinado usuário:
select count(*) as totalacessos, Format(Data,'dd/mm/yyyy') from logacessos where usuario='nome_usuario' group by Format(Data,'dd/mm/yyyy')

------
Mero mortal!

#11 TucaZ

TucaZ

    Normal

  • Usuários
  • 99 posts
  • Sexo:Não informado

Posted 18/10/2004, 13:58

Inicialmente o meu problema era só com o distinct então tentei ser o mais breve em explica-lo aqui. Essas duas SQLs, Prog, não me servem também porque preciso listar sim TODOS os acessos de TODOS os dias, mas preciso apenas trazer a contagem de usuários diferentes que acessaram e não quantos acessos no total houveram.

Ficou claro? Se não eu tento explicar um pouco mais.

Pra ilustrar:

http://www.agenciaw8...br/yepp/ver.asp

De uma olhada. Essa consulta deveria apenas me retornar 1 como total no dia 18 e 3 como total no dia 17 pois apenas os usuários diferentes deveriam ser contados. Tente clicar no dia que irá pra um link que detalha um pouco mais o dia e você irá compreender direitinho o que deve ser feito.

Abraços e obrigado pela boa vontade!

#12 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 18/10/2004, 14:21

Veja se esta solução lhe satisfaz... Observe o código das consultas:
cons_AcessoUsuarioDia
cons_AcessoUnicoDia

Attached Files


------
Mero mortal!

#13 TucaZ

TucaZ

    Normal

  • Usuários
  • 99 posts
  • Sexo:Não informado

Posted 18/10/2004, 15:21

Hmm, ainda não implementei porque fui almoçar (:P) mas gostei da idéia de usar uma consulta pronta como fonte de dados. Vou tentar implementar e posto o resultado aqui. Valeu, Prog. Não sabia que podia criar "views" com Access também.

Abraços

#14 TucaZ

TucaZ

    Normal

  • Usuários
  • 99 posts
  • Sexo:Não informado

Posted 18/10/2004, 16:30

Boa! (y)

Funcionou fazendo o Select a partir de uma consulta pronto. Muito bom! Valeu Prog.

Abraços

#15 LEANDRO PAIVA

LEANDRO PAIVA

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 22/05/2007, 00:39

Prezados, estou com o mesmo problema, soh que o arquivo anexado nao abre aqui nao sei o motivo, serah que poderia colar a solução para eu tentar montar. Abaixo segue a consulta que estou colocando, no entanto nao retorna somente os pedidos com ID diferente que desejo.

lojaDB.Execute("SELECT DISTINCT(ped_id), * FROM pedidos WHERE id LIKE '%" & Request.QueryString("procurar") & "%' OR ped_id LIKE '%" & Request.QueryString("procurar") & "%' OR data_ped LIKE '%" & Request.QueryString("procurar") & "%' OR status LIKE '%" & Request.QueryString("procurar") & "%' OR user_id LIKE '%" & Request.QueryString("procurar") & "%' OR user_id LIKE '%" & user_id & "%'OR prod_id LIKE '%" & Request.QueryString("procurar") & "%' OR prod_id LIKE '%" & prod_id & "%' OR prod_preco LIKE '%" & Request.QueryString("procurar") & "%' OR prod_quant LIKE '%" & Request.QueryString("procurar") & "%'")

Atenciosamente
LEandro Paiva




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq