Boa tarde, estou com uma dúvida em SQL.
Eu tenho 2 tabelas uma de ‘ponto’ e outra ‘horas’.
Cada vez que eu crio um ponto eu escolho o período e o vínculo a uma hora ficando assim.
|
|Horas
==============
| id | entrada | saida |
| 1 | 08:00 | 12:00 |
| 2 | 13:00 | 18:00 |
==============
|
|ponto
===================
| id | hora | projeto | turno
| 1 | 1 | 2 | manha
| 2 | 2 | 2 | tarde
===================
|
|Resultado esperado
===================
| entradaManha | saidaManha | entradaTarde | saidaTarde | projeto
| 08:00 | 12:00 | 13:00 | 18:00 | 2
===================
Minha dúvida é como eu crio um SQL que me exiba em uma linha o horario da manhã e da tarde para que eu possa exibir em meu programa.
Se houver outra forma externa ao SQL, pegando por JAVA por exemplo, é bem vinda.
testei de novo, tenta dessa forma
select (select h.entrada
from horas h
join ponto p on h.id = p.hora
where p.turno = 'manhã') as entradaManha,
(select h.saida
from horas h
join ponto p on h.id = p.hora
where p.turno = 'manhã') as saidaManha,
(select h.entrada
from horas h
join ponto p on h.id = p.hora
where p.turno = 'tarde') as entradaTarde,
(select h.saida
from horas h
join ponto p on h.id = p.hora
where p.turno = 'tarde') as saidaTarde
from dual
[quote=André Fonseca]tenta assim
select
( select h.entrada as entradaManha,
h.saida as saidaManha
from horas h
join pont p
on h.id = p.hora
where p.turno = 'manha'),
( select h.entrada as entradaTarde,
h.saida as saidaTarde
from horas h
join pont p
on h.id = p.hora
where p.turno = 'tarde')
from dual
[/quote]
edu_fernandes acho que sresolve o seu problema isso ai =]
Voce é de ourinhos? Moro em sta cruz do rio pardo
douglascst90 faz FATEC?
Conheci um Douglas na FATEC.
Ainda não testei os códigos, assim que testar aviso.
[quote=André Fonseca]testei de novo, tenta dessa forma
select (select h.entrada
from horas h
join ponto p on h.id = p.hora
where p.turno = 'manhã') as entradaManha,
(select h.saida
from horas h
join ponto p on h.id = p.hora
where p.turno = 'manhã') as saidaManha,
(select h.entrada
from horas h
join ponto p on h.id = p.hora
where p.turno = 'tarde') as entradaTarde,
(select h.saida
from horas h
join ponto p on h.id = p.hora
where p.turno = 'tarde') as saidaTarde
from dual
[/quote]
Mensagem de erro
Subquery returns more than 1 row
[quote=edu_fernandes]
Mensagem de erro
Subquery returns more than 1 row[/quote]
Isso está acontecendo pois os registros não são exatamentes iguais ao que você passou.
Na tabela ponto, como posso saber que um registro da manhã está relacionado a um registro da tarde?
Por projeto apenas?
Não tem mais colunas nessa tabela? Como o id da pessoa por exemplo…
De forma geral, você poderia fazer algo assim:
SELECT manha.entrada entradaManha, manha.saida saidaManha, tarde.entrada entradaTarde, tarde.saida saidaTarde
FROM
( SELECT entrada, saida, projeto FROM ponto WHERE turno = 'manha' ) manha
INNER JOIN ( SELECT entrada, saida, projeto FROM ponto WHERE turno = 'tarde' ) tarde
ON manha.projeto = tarde.projeto
A clausula ON muda de acordo com a relação entre os registros de ponto.
Fiz sistemas na fio, tive aula com sergio delfino, rogerio lazanha etc… hehehe!