Usuário com melhor resposta
Tirar valores nulos (sem aplicação de min ou max)

Pergunta
-
Boa tarde, estou com uma consulta que preciso trazer datas de entrada e saída de batida horarios aleatorios, preciso trazer todos.
Preciso saber como eliminar os campos nulos e trazer a linha de saida_acesso ao lado da de entrada_acesso, sem aplicar max ou min, pois se eu fizer irá trazer o maior ou menor, quero trazer todos.
CharlesTI.
- Editado CHARLES.PTU sexta-feira, 29 de junho de 2018 17:03
Respostas
-
Deleted
- Marcado como Resposta CHARLES.PTU sexta-feira, 29 de junho de 2018 20:42
Todas as Respostas
-
-
-
Eis o codigo original.
select CASE A.tipo_acesso WHEN 1 THEN A.HORAS_CONVERTIDA END 'entrada', CASE A.tipo_acesso when 2 THEN A.HORAS_CONVERTIDA END 'saida' from (SELECT PPC.ID AS ID_PESSOAS, EVA.pessoa_id AS ID_EVENTOSACESSOS, CONVERT (DATETIME, EVA.DATA, 126)AS DATA_CONVERTIDA, DBO.CONVERTESEGUNDOSEMHORAS(EVA.HORA) AS HORAS_CONVERTIDA, EVA.DATA AS DATA_DE_ACESSO, EVA.hora, EVA.equipamento_id, EVA.tipo_acesso, EVA.descricao, EVA.negado, PPC.n_identificador AS MATRICULA, PPC.NOME AS NOME_PESSOA, SMA.NUMCARTEIRA AS NUMEROCARTEIR, SMA.CODTURMA, EVA.DATA AS DATA_EVA FROM [192.111.1.11].[SecullumAcessoNet].[DBO].PESSOAS PPC (NOLOCK ) LEFT JOIN [192.111.1.11].[SecullumAcessoNet].[DBO].eventos_acessos EVA (NOLOCK) ON PPC.id = EVA.pessoa_id LEFT JOIN SMATRICPL SMA (NOLOCK) ON SMA.NUMCARTEIRA COLLATE SQL_Latin1_General_CP1_CI_AI = PPC.n_identificador COLLATE SQL_Latin1_General_CP1_CI_AI where sma.ra='118002420' and CONVERT (DATETIME, EVA.DATA) = '2018-05-15') A
CharlesTI.
-
Boa tarde,
Charles, talvez o exemplo do script abaixo possa ser adaptado para o seu caso:
declare @Tabela table (IdPessoa int, Tipo_Acesso int, Data date, Hora time); insert into @Tabela values (1, 1, '20180601', '10:00'), (1, 2, '20180601', '11:00'), (1, 1, '20180602', '15:00'), (1, 2, '20180602', '16:00'), (2, 1, '20180601', '10:00'), (2, 1, '20180531', '8:00'), (2, 2, '20180531', '9:00'), (2, 1, '20180601', '11:00'), (2, 2, '20180601', '12:00'), (2, 1, '20180602', '20:00'), (2, 2, '20180602', '21:00'), (2, 2, '20180602', '22:00'), (2, 1, '20180603', '8:00'), (2, 2, '20180603', '9:00'); with CTE_RN as ( select *, row_number() over(partition by IdPessoa order by Data, Hora) as RN from @Tabela ) select t1.IdPessoa, case when t1.Tipo_Acesso = 1 then t1.Data end as DataEnt, case when t1.Tipo_Acesso = 1 then t1.Hora end as HoraEnt, case when t2.Tipo_Acesso = 2 then t2.Data end as DataSai, case when t2.Tipo_Acesso = 2 then t2.Hora end as HoraSai from CTE_RN as t1 left join CTE_RN as t2 on t1.IdPessoa = t2.IdPessoa and t1.RN = t2.RN - 1 where (t1.Tipo_Acesso = 1) or (t1.Tipo_Acesso = 2 and t2.Tipo_Acesso = 2)
Espero que seja útil
Assinatura: http://www.imoveisemexposicao.com.br
-
Boa tarde Gapimex.
Deu erro sua consulta.
Msg 1087, Level 15, State 2, Line 1
Must declare the table variable "@Tabela".
Msg 1087, Level 15, State 2, Line 22
Must declare the table variable "@Tabela".
CharlesTI.
- Editado CHARLES.PTU sexta-feira, 29 de junho de 2018 19:59
-
Deleted
- Marcado como Resposta CHARLES.PTU sexta-feira, 29 de junho de 2018 20:42
-
Charles,
Talvez uma solução seja utilizar a função IsNull, e formatar a apresentação de um outro valor, pois a Max e Min não vai te ajudar.
Ou então utilizar as função Lag ou Lead.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
-
-
-
José Diz, acho que nesse caso que você citou fica vulnerável mesmo, acho que não seria possível identificar que os horários citados não deveriam formar um par entrada-saida.
Charles, ah quem me dera...
Assinatura: http://www.imoveisemexposicao.com.br
-
José Diz, acho que nesse caso que você citou fica vulnerável mesmo, acho que não seria possível identificar que os horários citados não deveriam formar um par entrada-saida.
Charles, ah quem me dera...
Assinatura: http://www.imoveisemexposicao.com.br
Gapimex,
Também vejo desta forma, além disso, ficaria mais fácil fazer os tratamentos.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]