AlessandraAzevedo Posted February 16, 2012 Report Share Posted February 16, 2012 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:00TENHO 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.... Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted February 16, 2012 Report Share Posted February 16, 2012 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. Quote Link to comment Share on other sites More sharing options...
0 AlessandraAzevedo Posted February 16, 2012 Author Report Share Posted February 16, 2012 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? Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted February 16, 2012 Report Share Posted February 16, 2012 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. Quote Link to comment Share on other sites More sharing options...
0 AlessandraAzevedo Posted February 17, 2012 Author Report Share Posted February 17, 2012 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 assimselect ( 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_horariosó que tá dando o erro....Only one expression can be specified in the select list when the subquery is not introduced with EXISTSAlguém sabe o que é? Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted February 17, 2012 Report Share Posted February 17, 2012 Boa tarde Alessandra, Retire todos os alias que colocou e faça o teste. Quote Link to comment Share on other sites More sharing options...
0 AlessandraAzevedo Posted February 19, 2012 Author Report Share Posted February 19, 2012 Boa tarde Alessandra, Retire todos os alias que colocou e faça o teste.Eu já fiz isso e nada....acho q vou me matar...kkkk Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted February 23, 2012 Report Share Posted February 23, 2012 Bom dia Alessandra, você está concatenando dois subselects, ok? No final do script tem a sintaxe from tab_horario. Comente esta parte e tente executar novamente. Quote Link to comment Share on other sites More sharing options...
Question
AlessandraAzevedo
OI PESSOAL, TO ENROSCADA NESSE SELECT AQUI.....
ESSE SELECT ME RETORNA: E EU GOSTARIA QUE ELE ME RETORNASSETENHO 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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.