Jump to content
Fórum Script Brasil
  • 0

SELECT CONFUSO


AlessandraAzevedo

Question

OI PESSOAL, TO ENROSCADA NESSE SELECT AQUI.....

SELECT        distinct  tab_grade_turma_disciplina_horario.horario_id,tab_disciplina.descricao AS disciplina, tab_grade_turma_disciplina.id AS grade_turma_disciplina_id, tab_grade_turma_disciplina.grade_turma_id, 
                         tab_grade_turma_disciplina.disciplina_id, ISNULL(tab_grade_turma_disciplina.professor_id, 0) AS PROFESSOR_ID, 
                         ISNULL(tab_grade_turma_disciplina.localaula_id, 0) AS LOCALAULA_ID, tab_grade_turma_disciplina.data_inicial, tab_grade_turma_disciplina.data_final, 
                         tab_professor.nome AS professor, tab_localaula.descricao AS localaula, tab_horario.horario_inicial, tab_horario.horario_final, 
                         CASE WHEN tab_horario.diasemana = 0 THEN '• Domingo ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), 
                         tab_horario.horario_final, 108) WHEN tab_horario.diasemana = 1 THEN '• Segunda - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) 
                         + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) WHEN tab_horario.diasemana = 2 THEN '• Terça - feira ' + CONVERT(varchar(12), 
                         tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
                         WHEN tab_horario.diasemana = 3 THEN '• Quarta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), 
                         tab_horario.horario_final, 108) WHEN tab_horario.diasemana = 4 THEN '• Quinta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) 
                         + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) WHEN tab_horario.diasemana = 5 THEN '• Sexta - feira ' + CONVERT(varchar(12), 
                         tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
                         WHEN tab_horario.diasemana = 6 THEN '• Sábado ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), 
                         tab_horario.horario_final, 108) END AS Horarios
FROM            tab_grade_turma_disciplina INNER JOIN
                         tab_grade_turma ON tab_grade_turma_disciplina.grade_turma_id = tab_grade_turma.id LEFT OUTER JOIN
                         tab_professor ON tab_grade_turma_disciplina.professor_id = tab_professor.id LEFT OUTER JOIN
                         tab_localaula ON tab_grade_turma_disciplina.localaula_id = tab_localaula.id INNER JOIN
                         tab_disciplina ON tab_grade_turma_disciplina.disciplina_id = tab_disciplina.id inner JOIN
                         tab_grade_turma_disciplina_horario ON tab_grade_turma_disciplina_horario.grade_turma_disciplina_id = tab_grade_turma_disciplina.id inner JOIN
                         tab_horario ON tab_horario.id = tab_grade_turma_disciplina_horario.horario_id
WHERE        (tab_grade_turma_disciplina.grade_turma_id = 691)
ESSE SELECT ME RETORNA:
HORARIO_ID  DISCIPLINA_ID GRADE_TURMA_DISCIPLINA_ID  GRADE_TURMA  PROFESSOR      LOCALAULA         HORARIOS.....ETC
62          61                2563                        691     JAIME GALVÃO  SALA 34          • Quarta - feira 08:00- 10:00:00
64          61             2563                        691     JAIME GALVÃO  SALA 34          • Sexta - feira 06:00- 07:00:00
E EU GOSTARIA QUE ELE ME RETORNASSE
HORARIO_ID     DISCIPLINA_ID   GRADE_TURMA_DISCIPLINA_ID        GRADE_TURMA........     PROFESSOR          LOCALAULA        
62                    61                         2563                                                     691                      JAIME GALVÃO              SALA 34         

HORARIOS.....
 • Quarta - feira 08:00- 10:00:00 / • Sexta - feira 06:00- 07:00:00

TENHO QUE USAR O GROUP BY? TENTEI O DISTINCT MAS não MUDOU NADA.....

É COMO SE EU FOSSE FAZER UM FOREACH PRA COLUNA "HORARIOS" E CONCATENAR TUDO NO MESMO REGISTRO....

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Boa tarde Alessandra,

Da forma que realizou o select, não tem como fazer a concatenação. Utilizando case, o resultado "entrará" apenas em uma das cláusulas...

Você consegue manipular o resultado do select em algum aplicativo?

Estou peguntando pois algumas implementações são bem mais simples (e rápidas) nos códigos fontes, do que no sql.

Não sei para que serviria este resultado (visualização em aplicativo, estatistica, relatório, etc), mas preferiria retirar os cases e passar para o fonte este tratamento:

- Os dias da semana seriam retornados como números mesmo, onde o código fonte colocaria os escritos.

- Os horários viviriam do jeito q postou, mas testaria: se o professor for o mesmo, concatenaria os horários.

As plataformas de desenvolvimento possuem funcionalidades mais voltadas a implementações, havendo mais recursos do que o sql.

Link to comment
Share on other sites

  • 0
Boa tarde Alessandra,

Da forma que realizou o select, não tem como fazer a concatenação. Utilizando case, o resultado "entrará" apenas em uma das cláusulas...

Você consegue manipular o resultado do select em algum aplicativo?

Estou peguntando pois algumas implementações são bem mais simples (e rápidas) nos códigos fontes, do que no sql.

Não sei para que serviria este resultado (visualização em aplicativo, estatistica, relatório, etc), mas preferiria retirar os cases e passar para o fonte este tratamento:

- Os dias da semana seriam retornados como números mesmo, onde o código fonte colocaria os escritos.

- Os horários viviriam do jeito q postou, mas testaria: se o professor for o mesmo, concatenaria os horários.

As plataformas de desenvolvimento possuem funcionalidades mais voltadas a implementações, havendo mais recursos do que o sql.

E se ao invés de eu trazer na minha gridview diretamente, pelo RowDataBound da grid eu adicionar a coluna com os dados de acordo com a linha q ele está criando?

Mas como adiciono isso?

Link to comment
Share on other sites

  • 0

Se quiser fazer diretamente no sql e o mesmo retornar os dados certinhos, terá q "programar" (da mesma forma que faria no código fonte).

Terá que criar uma temporária, fazer um while (ou cursor) para testar linha a linha e ir concatenando os dados de acordo com o profissional.

Será mais dificil e trabalhoso, mas retornará o que deseja.

Link to comment
Share on other sites

  • 0
Se quiser fazer diretamente no sql e o mesmo retornar os dados certinhos, terá q "programar" (da mesma forma que faria no código fonte).

Terá que criar uma temporária, fazer um while (ou cursor) para testar linha a linha e ir concatenando os dados de acordo com o profissional.

Será mais dificil e trabalhoso, mas retornará o que deseja.

Bom to tentando outras soluções por aqui...pensei em algo tipo assim

select (
select tab_horario.id,
case
WHEN tab_horario.diasemana = 0 THEN '• Domingo ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 1 THEN '• Segunda - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 2 THEN '• Terça - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 3 THEN '• Quarta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 4 THEN '• Quinta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 5 THEN '• Sexta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 6 THEN '• Sábado ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) END AS Horarios
from tab_grade_turma_disciplina INNER JOIN
                  tab_grade_turma ON tab_grade_turma_disciplina.grade_turma_id = tab_grade_turma.id LEFT OUTER JOIN
                         tab_professor ON tab_grade_turma_disciplina.professor_id = tab_professor.id LEFT OUTER JOIN
                         tab_localaula ON tab_grade_turma_disciplina.localaula_id = tab_localaula.id INNER JOIN
                         tab_disciplina ON tab_grade_turma_disciplina.disciplina_id = tab_disciplina.id LEFT OUTER JOIN
                         tab_grade_turma_disciplina_horario ON tab_grade_turma_disciplina_horario.grade_turma_disciplina_id = tab_grade_turma_disciplina.id LEFT OUTER JOIN
                         tab_horario ON tab_horario.id = tab_grade_turma_disciplina_horario.horario_id 
where tab_horario.id= 62 group by tab_horario.id, tab_horario.diasemana, tab_horario.horario_inicial, tab_horario.horario_final) + 
(select
case
WHEN tab_horario.diasemana = 0 THEN '• Domingo ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 1 THEN '• Segunda - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 2 THEN '• Terça - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 3 THEN '• Quarta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 4 THEN '• Quinta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 5 THEN '• Sexta - feira ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) 
WHEN tab_horario.diasemana = 6 THEN '• Sábado ' + CONVERT(varchar(12), tab_horario.horario_inicial, 108) + '  -  ' + CONVERT(varchar(12), tab_horario.horario_final, 108) END AS Horarios
from tab_horario  where id = 64 group by tab_horario.id, tab_horario.diasemana, tab_horario.horario_inicial, tab_horario.horario_final) as teste2  from tab_horario

só que tá dando o erro....Only one expression can be specified in the select list when the subquery is not introduced with EXISTS

Alguém sabe o que é?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...