ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Pivot SQL Server

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 254
Localização: ribeirao preto

MensagemEnviada: Ter Mai 21, 2019 9:45 am    Assunto: Pivot SQL Server Responder com Citação

Bom dia, preciso fazer um controle de horas como um relógio de ponto.

Campos
IdFuncionario int
DataInclusao DateTime
DataEntrada DateTime
DataSaida DateTime

Quando Executo o Select apresenta as informações em linhas, exemplo.

IdFuncionario DataInclusao DataEntrada DataSaida
18 14-05-2019 07:30 14-05-2019 07:30 14-05-2019 11:30
18 14-05-2019 12:30 14-05-2019 12:30 14-05-2019 17:30
18 14-05-2019 17:30 14-05-2019 17:30 14-05-2019 20:30

Preciso dessas informações em colunas, sei que tem o comando PIVOT no SQL, mas nao consigo assimilar.
Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11252

MensagemEnviada: Qua Mai 22, 2019 9:05 am    Assunto: Responder com Citação

Bom dia,

Você pode postar um exemplo de como gostaria que ficasse o retorno da query?
Qual versão do SQL Server você está utilizando?

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 254
Localização: ribeirao preto

MensagemEnviada: Qua Mai 22, 2019 10:11 am    Assunto: Responder com Citação

Bom dia Imex, obrigado pela ajuda.
Uso o SQL Server 2008 r2

Essa é a forma que apresenta hoje.


Preciso dessa forma.

muito obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11252

MensagemEnviada: Qua Mai 22, 2019 12:02 pm    Assunto: Responder com Citação

Considerando esse exemplo que você postou, o resultado tem que retornar as 2 linhas mesmo? E tem que ter as colunas Observacao, Tempo e Minutos da última linha?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 254
Localização: ribeirao preto

MensagemEnviada: Qua Mai 22, 2019 12:17 pm    Assunto: Responder com Citação

Me desculpe, editei a imagem de maneira incorreta.
Tem que retornar somente 1 linha e a a somatória das horas o o campo observacao.

obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11252

MensagemEnviada: Qua Mai 22, 2019 2:13 pm    Assunto: Responder com Citação

O que é gravado na coluna Id_ABT080? Qual a finalidade dessa coluna?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 254
Localização: ribeirao preto

MensagemEnviada: Qua Mai 22, 2019 2:43 pm    Assunto: Responder com Citação

Boa tarde, essa coluna Id_ABT080 é o código do funcionário.
obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11252

MensagemEnviada: Qua Mai 22, 2019 3:12 pm    Assunto: Responder com Citação

Boa tarde,

Considerando que existam várias linhas/registros na tabela, como é possível identificar quais linhas formam o par para obter as entradas e saídas 1 e 2?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 254
Localização: ribeirao preto

MensagemEnviada: Qua Mai 22, 2019 3:16 pm    Assunto: Responder com Citação

Essa é mais uma de tantas dúvidas que tive ao fazer esse sistema de ponto.
Pensei em limitar em 12 ocorrências para (6)entrada / (6) saídas.

obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11252

MensagemEnviada: Qua Mai 22, 2019 3:59 pm    Assunto: Responder com Citação

Não entendi a sua resposta, e não sei se você entendeu a minha pergunta.
No exemplo que você postou as 2 linhas estão com a data de inclusão igual a 14/03/2019, e as datas de entrada e saída também são iguais, mas imagino que seja possível por exemplo que um funcionário entre a noite e saia na madrugada do dia seguinte, por isso perguntei se existe uma forma de identificar a linha da primeira entrada/saída e a linha da segunda entrada/saída.
Ou a sua idéia é simplesmente pegar a primeira linha com a segunda, a terceira com a quarta e assim por diante?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 254
Localização: ribeirao preto

MensagemEnviada: Qui Mai 23, 2019 8:01 am    Assunto: Responder com Citação

Bom dia, desculpe a confusão.
Mas o que preciso é sua última observação.
"Ou a sua idéia é simplesmente pegar a primeira linha com a segunda, a terceira com a quarta e assim por diante?"

Muito obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11252

MensagemEnviada: Qui Mai 23, 2019 11:04 am    Assunto: Responder com Citação

Bom dia,

Experimente fazer uns testes com o esboço abaixo:

Código:
with CTE_RN as
(
    select
        Id_ABT080,
        DataInclusao,
        DataEntrada,
        DataSaida,
        Observacao,
        row_number() over(partition by Id_ABT080 order by DataInclusao) as RN
    from ABT08100
    -- where Id_ABT080 = 18
)

select
    *
from CTE_RN as c1
left join CTE_RN as c2
    on c2.Id_ABT080 = c1.Id_ABT080 and
       c2.RN = c1.RN + 1


Acredito que será necessário revisar os dados retornados para correção de eventuais falhas, como quando o funcionário esquecer de registrar o ponto ou registrar mais de uma vez.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 254
Localização: ribeirao preto

MensagemEnviada: Qui Mai 23, 2019 2:17 pm    Assunto: [RESOLVIDO] Responder com Citação

Boa tarde, Imex.
Muito obrigado pela grande ajuda mais uma vez.
Abraço
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB