Ir para conteúdo

Arquivado

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

Will_Pena

Consulta SQL no VBA excel (count, distinct e datepart)

Recommended Posts

Bom dia galera,

 

estou com dois problemas de consulta, que já procurei ajuda e ainda não consegui:

 

Primeiro:

- Preciso retornar o número de datas lançadas distintas, por mês. Fiz o seguinte código:

 

Set RECOR = CONN.OpenRecordset("SELECT COUNT (DISTINCT data_) FROM tabela WHERE excluido = false AND month(data_)='" & M & "'")

 

onde M é uma variável que irá simular os meses de 1 a 12.

 

 

Segundo:

- Preciso fazer praticamente a mesma consulta, porem agora somando o tempo total, porém estou tendo problema com a busca pelo numero da semana.

 

Set RECOR = CONN.OpenRecordset("SELECT sum(tempo) FROM tabela WHERE excluido = false and datepart(wk, data_)='" & S & "' GROUP BY TURNO")

 

alguem me ajude!?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Set RECOR = CONN.OpenRecordset("SELECT DISTINCT COUNT (data_) FROM tabela WHERE excluido = false AND month(data_)='" & M & "'")

SQL estava errado.

 

O segundo eu não entendi o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

KhaosDoctor,

 

da forma que você enviou, o programa seleciona todas as datas lançadas no sistema. ou seja, se eu lancei

02/10/2013

02/10/2013

 

ele me retorna o numero 2, quando deveria retornar apenas 1. entendeu?

 

 

já o segundo problema, eu preciso buscar todos os dados conforme o numero da semana, a partir de uma data lançada no meu banco.

 

exemplo:

15/10/2013 é o dado lançado no banco.

na busca eu preciso que ele me retorne 42, que é o numero da semana no ano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas ele seleciona as datas filtrando os registros duplicados, deveria haver uma linha para cada data.

 

 

Tente esse no segundo, sei que são a mesma coisa, mas as vezes dá erro:

Set RECOR = CONN.OpenRecordset("SELECT sum(tempo) FROM tabela WHERE excluido = false and datepart(WEEK, data_)='" & S & "' GROUP BY TURNO")

Compartilhar este post


Link para o post
Compartilhar em outros sites

KhaosDoctor,

 

Deu não cara...

 

o segundo problema eu até resolvi, mas foi meio que na gambiarra..

eu criei um campo no banco de dados, chamado "semana" e toda vez que eu for inserir algum dado no banco, ele já vai pegar a data e lançar no campo semana, assim:

 

RECOR!semana = Format(txt_data1.Value, "WW")

 

assim vou ocupar mais espaço no meu banco, mas o problema foi resolvido.

 

 

quanto ao primeiro problema, ele persiste. Não consegui contar as datas distintas por mês.

 

ele continua retornando o total de datas inseridas, sendo que quero eliminar as repetidas..

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim?

 

Do Until M = 13

Set RECOR = CONN.OpenRecordset("SELECT COUNT(INNERSELECT.DATAS) AS Total FROM(SELECT DISTINCT data_ AS DATAS FROM Revisao) INNERSELECT WHERE excluido = false AND mes='" & M & "' GROUP BY turno")

 

 

ele está dando erro..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma string antes para jogar ai dentro como comando, provavelmente ele deve estar dando erro de concatenação ou algo do tipo, vá concatenando as partes das strings, depois de um print nelas para saber se está tudo ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Khaos,

 

desculpe abusar de sua paciencia, mas sou novo nessa arte de programar.. e até consegui bastante coisa pra quem não sabia nada.. meu negocio é webdesign...

 

entao quando você disse sobre criar string, não entendi..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, ao invés de você usar uma string gigante como você fez, você pode ir juntando as partes dela para ter certeza que está tudo ok, por exemplo:

 

Ao invés de [inline]String texto = "O gato roeu a roupa do rei de roma";[/inline]

 

Você pode usar

 

String texto = "O gato ";
texto += "roeu a roupa";
texto += "do rei de roma";

E ir concatenando os textos isso ajuda bastante para resolver problemas de escrita.

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.