Dúvida SQL

6 respostas
edu_fernandes

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.

6 Respostas

Andre_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

douglascst90

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

edu_fernandes acho que sresolve o seu problema isso ai =]

Voce é de ourinhos? Moro em sta cruz do rio pardo :slight_smile:

edu_fernandes

douglascst90 faz FATEC?

Conheci um Douglas na FATEC.

Ainda não testei os códigos, assim que testar aviso.

edu_fernandes

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

Mensagem de erro

Subquery returns more than 1 row

A

edu_fernandes:

Mensagem de erro

Subquery returns more than 1 row

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.

douglascst90

Fiz sistemas na fio, tive aula com sergio delfino, rogerio lazanha etc… hehehe!

Criado 20 de dezembro de 2012
Ultima resposta 20 de dez. de 2012
Respostas 6
Participantes 4