Ir para conteúdo
Fórum Script Brasil
  • 0

Select Avançada


Eric Silva

Pergunta

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 para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

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).

Link para o comentário
Compartilhar em outros sites

  • 0

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_data

Esse é 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) - notnull

TB_PONTO

ponto_codigo - int - pk - not null (Autoincremento).

ponto_data - datetime - notnull

fun_codigo - int - fk - not null // --- Essa chave extrangeira vem da tabela de funcionários

com a primeira linha fiz a seleção

Select * from tb_funcionario t, tb_ponto x

Apelidei 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 and

Na 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' and

Na 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_data

Assim 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.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...