Ir para conteúdo
Fórum Script Brasil
  • 0

SELECT CONFUSO


AlessandraAzevedo

Pergunta

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 para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...