Eric Silva Posted July 22, 2011 Report Share Posted July 22, 2011 Olá a todos, Sou novo por aqui. Estou aprendendo sql e encontrei aqui um problema que não consigo achar solução. Se alguma boa alma puder me ajudar: É o seguinte, tenho uma tabela que recebe os dias que o funcionário trabalhou, assim:funcionario dia 17 20/0617 21/0617 22/0617 23/06 19 19/0619 20/0619 21/06O que preciso reamente e filtrar essas informações e exibir-las desse jeito: diasmatricula 19 20 21 22 23 17 x x x x 19 x x x Ou seja, para cada dia ele que o funcionario trabalhar ele deve marcar com um x. Isso é possivel só com SQL?Se puderem me ajudar ficarei grato. Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted August 1, 2011 Report Share Posted August 1, 2011 Bom dia Eric, Possível de se fazer em sql sim.... mas seria mais aconselhável montar os dados na ferramenta que utiliza para desenvolver. - Você faria um "select distinct" para pegar apenas os dias de trabalho. - Colocaria os dias em colunas. - Depois faria um "select distinct" para pegar os códigos dos funcionários. - Colocaria os funcionários em linhas. - Faria um select para pegar as datas de trabalho e funcionários, colocando o X correspondentes. Já fiz uma implementação parecida em VB6, utilizando Text Grid (bem semalhante ao excel). Quote Link to comment Share on other sites More sharing options...
0 anderson.egidio Posted August 17, 2011 Report Share Posted August 17, 2011 Cara, vou tentar te ajudar mas acho que você não tá fazendo uma pergunta de SQL Server e sim de Java ou Delphi ou até mesmo VB porque o que você quer saber é como colocar os nomes dos clientes e marcar somente os dias que eles trabalharam, sendo assim você não tá no lugar certo, aqui é pergunta de SQL.Mesmo assim preparei uma explicação pra você observe: SELECT t.fun_codigo, t.fun_nome, x.ponto_data FROM tb_funcionario t, tb_ponto x where t.fun_codigo = x.fun_codigo and x.ponto_data between '2011-01-01' and '2011-01-20' and t.fun_codigo in (1,2) order by x.ponto_dataEsse é o código que você precisa pra conseguir o resultado que você deseja, mas a disposição do que você tem com esse código já é outra coisa.Imagino que você precise que comente o código pra você então lá vai.primeiramente eu fiz uma seleção buscando a tabela de funcionários e a tabela de ponto de trabalho.TB_FUNCIONARIO:fun_codigo - int - pk - not null (Autoincremento).fun_nome - varchar(45) - notnullTB_PONTOponto_codigo - int - pk - not null (Autoincremento).ponto_data - datetime - notnullfun_codigo - int - fk - not null // --- Essa chave extrangeira vem da tabela de funcionárioscom a primeira linha fiz a seleçãoSelect * from tb_funcionario t, tb_ponto xApelidei a de funcionário de "t" e a de ponto de "x"Depois preparei a primeira condição dizendo pra mostrar todos que estiverem cadastrados na tabela de funcionários que também estejam na tabela de ponto ou seja mostrar os que tem dias trabalhados e continuei com o "And" para mais uma condição.Where t.fun_codigo = x.fun_codigo andNa segunda condicional eu ordeno que filtre o campo onde fica registrada a data do ponto trabalhado em um intervalo de data, pra isso utilizei o comando BETWEEN sendo assim determinei uma data no formato aaaa-mm-dd, já que estou utilizando esse formato no BD e continuo para uma terceira condição com o "And" novamente.x.ponto_data between '2011-01-01' and '2011-01-20' andNa terceira condição eu determino que ele faça toda essa checagem somente nas matriculas que estiverem contidas na listagem dentro dos "()", mesmo que tenha informações das outras matriculas só vão ser mostrado as matriculas contidas no "()", ficando assim a linha de comando: t.fun_codigo in (1,2) E por fim eu coloco uma linha a mais, porém não é uma condição de comparação então não preciso continuar com o "And" para continuar, para ordenar pelo campo que eu quiser, no caso eu escoli pela data de ponto mas poderia ser outro campo. order by x.ponto_dataAssim termina o meu comentário sobre o código informado acima.Espero ter ajudado, ;) Abraço a todos.OBS: não esqueça de colocar resolvido no seu post para saber-mos que não precisa mais tentar ajudar. Quote Link to comment Share on other sites More sharing options...
Question
Eric Silva
Olá a todos,
Sou novo por aqui. Estou aprendendo sql e encontrei aqui um problema que não consigo achar solução. Se alguma boa alma puder me ajudar:
É o seguinte, tenho uma tabela que recebe os dias que o funcionário trabalhou, assim:
funcionario dia
17 20/06
17 21/06
17 22/06
17 23/06
19 19/06
19 20/06
19 21/06
O que preciso reamente e filtrar essas informações e exibir-las desse jeito:
dias
matricula 19 20 21 22 23
17 x x x x
19 x x x
Ou seja, para cada dia ele que o funcionario trabalhar ele deve marcar com um x.
Isso é possivel só com SQL?
Se puderem me ajudar ficarei grato.
Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.