Alef Menezes Postado 15 de Outubro de 2021 Tópicos Que Criei: 1 Tópicos/Dia: 0.00 Meu Conteúdo: 6 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 41 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Denunciar Compartilhar Postado 15 de Outubro de 2021 (editado) Boa Tarde, Estou tentando montar uma expressão para montar um quadro de horário, porém a expressão não retorna valor algum. O relatório utiliza quatro consultas SQL, porém os dados que preciso estão sendo retornados na consulta. A situação é a seguinte: preciso montar um quadro de horário onde tenho três informações para me localizar na matriz de horário da semana, sendo eles: TURNO (CODTURNO), DIA DASEMANA (DIA) E CODHORPRE. O turno pode me retornar os códigos: 1 (manhã), 2 (tarde) e 3 (noite); O dia pode me retornar os códigos: 1, 2, 3, 4, 5, 6 e 7. (no meu caso só utilizo de 2 a 6) O CODHORPRE me retorna um horário especifico, nele tenho do 1 ao 21. Para facilitar a expressão, já que tenho uma combinação de 3 x 6 x 21. Eu criei uma uma quarta coluna na tabela, denominada CODMATRIZHORARIO, que é a concatenação de: CODTURNO + DIA + CODHORPRE Essa concatenação me retorna codigos de 3 a 4 digitos no seguinte formato: Se eu tenho uma aula no turno na MANHÃ, na TERÇA-FEIRA, no QUINTO horário o código seria: 135Se eu tenho uma aula no turno na MANHÃ, na TERÇA-FEIRA, no QUINTO horário o código seria: 135 Editado 15 de Outubro de 2021 por Alef Menezes Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
luisgustavogomes Postado 15 de Outubro de 2021 Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 470 Conteúdo/Dia: 0.21 Reputação: 132 Pontos/Conquistas: 3.143 Conteúdo Resolvido: 0 Dias Ganho: 63 Status: Offline Idade: 35 Dispositivo: Windows Denunciar Compartilhar Postado 15 de Outubro de 2021 @Alef Menezes, boa tarde! Entendi seu drama, porém como sua matriz do relatório é fixa, podes tentar utilizar o PIVOT resolver, só tem que criar cuidar que o PIVOT funciona com campos numéricos, ou seja, caso queira tratar que apresente na sua matriz como retorno a disciplina, terás que criar uma lógica utilizando alguma forma de identificação. Como exemplo podes acessar o link https://sqlfromhell.wordpress.com/2013/07/18/transformando-linhas-em-colunas-com-pivot/, caso não consigas, inclua a data do seu result set e nós enviei com o formato de excel que podemos ajudar. abraços. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Alef Menezes Postado 15 de Outubro de 2021 Tópicos Que Criei: 1 Tópicos/Dia: 0.00 Meu Conteúdo: 6 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 41 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Autor Denunciar Compartilhar Postado 15 de Outubro de 2021 No meu caso não trabalho com matriz, denominei matriz pq visualmente é uma. Todos são campos fixos. Faltou informação na postagem, pq o forum caiu para mim. Alterei agora o texto. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
luisgustavogomes Postado 15 de Outubro de 2021 Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 470 Conteúdo/Dia: 0.21 Reputação: 132 Pontos/Conquistas: 3.143 Conteúdo Resolvido: 0 Dias Ganho: 63 Status: Offline Idade: 35 Dispositivo: Windows Denunciar Compartilhar Postado 15 de Outubro de 2021 Sim, não é o componente matriz do gerador... é sim matriz visual igualmente você comentou... mas podes montar a consulta para sair uma matriz visual. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
luisgustavogomes Postado 15 de Outubro de 2021 Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 470 Conteúdo/Dia: 0.21 Reputação: 132 Pontos/Conquistas: 3.143 Conteúdo Resolvido: 0 Dias Ganho: 63 Status: Offline Idade: 35 Dispositivo: Windows Denunciar Compartilhar Postado 15 de Outubro de 2021 @Alef Menezes, boa noite! Segue uma possível solução. /* USE MASTER GO ;WITH TAB AS ( SELECT CODCOLIGADA,CODFILIAL,CODPROF,NMDISCIPLINA,DIA,DIASEMANA,CODTURNO,TURNO,HORPREVISAO,CODHORPRE,NMTURMA FROM (VALUES (2,9,'001706','LINGUA PORTUGUESA' ,3,'3ª TERÇA-FEIRA' ,1,'1° TURNO: MANHA','09:50 - 10:40',5,'7º ANO D') ,(2,9,'001706','LINGUA PORTUGUESA' ,3,'3ª TERÇA-FEIRA' ,1,'1° TURNO: MANHA','10:40 - 11:30',6,'7º ANO D') ,(2,9,'001706','LINGUA PORTUGUESA' ,5,'5ª QUINTA-FEIRA' ,1,'1° TURNO: MANHA','08:40 - 09:30',3,'7º ANO D') ,(2,9,'001706','LINGUA PORTUGUESA' ,5,'5ª QUINTA-FEIRA' ,1,'1° TURNO: MANHA','09:50 - 10:40',5,'7º ANO D') ,(2,9,'001706','REDAÇÃO' ,5,'5ª QUINTA-FEIRA' ,1,'1° TURNO: MANHA','10:40 - 11:30',6,'6º ANO G') ,(2,9,'001706','REDAÇÃO' ,6,'6ª SEXTA-FEIRA' ,1,'1° TURNO: MANHA','08:40 - 09:30',3,'6º ANO F') ,(2,9,'001706','LINGUA PORTUGUESA' ,6,'6ª SEXTA-FEIRA' ,1,'1° TURNO: MANHA','10:40 - 11:30',6,'7º ANO D') ,(2,9,'001706','LINGUA PORTUGUESA' ,2,'2ª SEGUNDA-FEIRA' ,2,'2° TURNO: TARDE','15:50 - 16:40',5,'7º ANO D') ,(2,9,'001706','LINGUA PORTUGUESA' ,3,'3ª TERÇA-FEIRA' ,2,'2° TURNO: TARDE','14:40 - 15:30',3,'7º ANO D') ,(2,9,'001706','REDAÇÃO' ,4,'4ª QUARTA-FEIRA' ,2,'2° TURNO: TARDE','15:50 - 16:40',5,'6º ANO G') ,(2,9,'001706','LINGUA PORTUGUESA' ,5,'5ª QUINTA-FEIRA' ,2,'2° TURNO: TARDE','14:40 - 15:30',3,'7º ANO D') ,(2,9,'001706','REDAÇÃO' ,6,'6ª SEXTA-FEIRA' ,2,'2° TURNO: TARDE','14:40 - 15:30',3,'6º ANO F') ,(2,9,'001706','LINGUA PORTUGUESA' ,6,'6ª SEXTA-FEIRA' ,2,'2° TURNO: TARDE','15:50 - 16:40',5,'7º ANO D') ) AS T (CODCOLIGADA,CODFILIAL,CODPROF,NMDISCIPLINA,DIA,DIASEMANA,CODTURNO,TURNO,HORPREVISAO,CODHORPRE,NMTURMA) ) --SELECT * FROM TAB , TAB_HORARIO AS ( SELECT CODCOLIGADA,CODFILIAL,CODHORPRE,HORPREVISAO,CODTURNO,TIPO FROM (VALUES (2,9,1,'07:00 - 07:50',1,'N') ,(2,9,1,'13:00 - 13:50',2,'N') ,(2,9,2,'07:50 - 08:40',1,'N') ,(2,9,2,'13:50 - 14:40',2,'N') ,(2,9,3,'08:40 - 09:30',1,'N') ,(2,9,3,'14:40 - 15:30',2,'N') ,(2,9,4,'09:30 - 09:50',1,'I') ,(2,9,4,'15:30 - 15:50',2,'I') ,(2,9,5,'09:50 - 10:40',1,'N') ,(2,9,5,'15:50 - 16:40',2,'N') ,(2,9,6,'10:40 - 11:30',1,'N') ,(2,9,6,'16:40 - 17:30',2,'N') ,(2,9,7,'11:30 - 12:20',1,'N') ,(2,9,7,'17:30 - 18:20',2,'N') ) AS T (CODCOLIGADA,CODFILIAL,CODHORPRE,HORPREVISAO,CODTURNO,TIPO) ) SELECT * FROM TAB_HORARIO H OUTER APPLY ( SELECT TI.NMDISCIPLINA AS '2ª SEGUNDA-FEIRA' FROM TAB TI WHERE TI.CODCOLIGADA = H.CODCOLIGADA AND TI.CODFILIAL = H.CODFILIAL AND TI.CODTURNO = H.CODTURNO AND TI.CODHORPRE = H.CODHORPRE AND TI.DIA = 2 ) SEG OUTER APPLY ( SELECT TI.NMDISCIPLINA AS '3ª TERÇA-FEIRA' FROM TAB TI WHERE TI.CODCOLIGADA = H.CODCOLIGADA AND TI.CODFILIAL = H.CODFILIAL AND TI.CODTURNO = H.CODTURNO AND TI.CODHORPRE = H.CODHORPRE AND TI.DIA = 3 ) TER OUTER APPLY ( SELECT TI.NMDISCIPLINA AS '4ª QUARTA-FEIRA' FROM TAB TI WHERE TI.CODCOLIGADA = H.CODCOLIGADA AND TI.CODFILIAL = H.CODFILIAL AND TI.CODTURNO = H.CODTURNO AND TI.CODHORPRE = H.CODHORPRE AND TI.DIA = 4 ) QUA OUTER APPLY ( SELECT TI.NMDISCIPLINA AS '5ª QUINTA-FEIRA' FROM TAB TI WHERE TI.CODCOLIGADA = H.CODCOLIGADA AND TI.CODFILIAL = H.CODFILIAL AND TI.CODTURNO = H.CODTURNO AND TI.CODHORPRE = H.CODHORPRE AND TI.DIA = 5 ) QUI OUTER APPLY ( SELECT TI.NMDISCIPLINA AS '6ª SEXTA-FEIRA' FROM TAB TI WHERE TI.CODCOLIGADA = H.CODCOLIGADA AND TI.CODFILIAL = H.CODFILIAL AND TI.CODTURNO = H.CODTURNO AND TI.CODHORPRE = H.CODHORPRE AND TI.DIA = 6 ) SEX OUTER APPLY ( SELECT TI.NMDISCIPLINA AS 'SABADO' FROM TAB TI WHERE TI.CODCOLIGADA = H.CODCOLIGADA AND TI.CODFILIAL = H.CODFILIAL AND TI.CODTURNO = H.CODTURNO AND TI.CODHORPRE = H.CODHORPRE AND TI.DIA = 7 ) SAB ORDER BY H.CODCOLIGADA, H.CODFILIAL, H.CODTURNO, H.CODHORPRE /* Result sets Assim nesta consulta, podes colocar a quebra nos campos CODCOLIGADA, CODFILIAL CODTURNO e na questão do intervalo é só colocar um campo texto sobreposto aos campos da consulta e imprimir utilizando regra de formação no campo TIPO. Executando essa matriz visual pela consulta, certamente irá ficar muito rápido. Espero lhe ajudar. Abraços. 1 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Jair - Fórmula Postado 18 de Outubro de 2021 Tópicos Que Criei: 885 Tópicos/Dia: 0.13 Meu Conteúdo: 8.802 Conteúdo/Dia: 1.34 Reputação: 291 Pontos/Conquistas: 106.268 Conteúdo Resolvido: 0 Dias Ganho: 186 Status: Offline Idade: 51 Dispositivo: Windows Denunciar Compartilhar Postado 18 de Outubro de 2021 @Alef Menezes Tudo bem? Recebi um alerta que queria apagar o post aqui em questão, pois havia colocado algo errado. Pelo que vi nos demais posts acima, me parece que resolveu, certo ?? Posso manter normalmente? Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Alef Menezes Postado 20 de Outubro de 2021 Tópicos Que Criei: 1 Tópicos/Dia: 0.00 Meu Conteúdo: 6 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 41 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Autor Denunciar Compartilhar Postado 20 de Outubro de 2021 Pode manter sim, vou verificar a solução do colaborador acima e verificar se entendi o que ele quis dizer, pois no caso acima dele forçou turma e disciplina. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Alef Menezes Postado 20 de Outubro de 2021 Tópicos Que Criei: 1 Tópicos/Dia: 0.00 Meu Conteúdo: 6 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 41 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Autor Denunciar Compartilhar Postado 20 de Outubro de 2021 @luisgustavogomes eu tentei executar sua solução, mas não consegui adapta-la a minha solução. Na questão do Intervalo, ele não precisa aparecer. Consegui gerar com PIVOT como você me aconselhou a tabela de horário, porém as linhas "fantasmas" dos horários que o professor não tem aula elas são o desafio. E a posterior, tenho um segundo problema no período noturno, tenho dois tipos de horarios: aulas de 50 minutos e outras de 1 hora. só que existe uma equivalência na tabela que terei que tratar, provavelmente criando 2 sql a parte um para cada horário e ao invez de gerar 3 tabelas irei gerar 4, um para cada horário, sem fazer o "de - para" no código noturno. Porém no fim disso tudo, se existe-se uma forma de utilizar no RM - SGE expressão, forçando que "Se CODIGO_HORARIO = X ENTÃO NMTURMA", resolveria todos os problemas, atenderia minha usuária e o trabalho só seria realmente formatação de texto e adição das expressões a tabela. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Alef Menezes Postado 20 de Outubro de 2021 Tópicos Que Criei: 1 Tópicos/Dia: 0.00 Meu Conteúdo: 6 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 41 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Autor Denunciar Compartilhar Postado 20 de Outubro de 2021 Vamos por partes: (1) Em uma expressão IF do RM-SGE é possível comparar um campo "STRING" com uma string fixa '123'? (2) É possível que o retorno de uma comparação IF do RM seja um retorno de um campo não utilizado na comparação do IF? Ex: "Se CODIGO_HORARIO = X ENTÃO NMTURMA", Não devo colocar o SENÂO ' ', pq senão a cada execução de linha ela vai sobrescrever com vazio o resultado nos outros campos. CODIGO_HORARIO => é uma coluna da minha tabela, ela é STRING e retorna STRING númerica que varia de 121 até 3621 (No total são apenas 120 códigos, pois é uma combinação de (Turno[1,2 ou 3], DiaDaSemana[2, 3, 4,5 ou 6] e horário[ 1 ao 21]). X => é um campo FIXO no relatório criado RM que identificada cada campo da matriz de horário. É um campo que deve ser string, porém não se de no IF devo escrever '123' ou 123. NMTURMA => é uma coluna (pivotada no exemplo acima) porém no SQL original que eu tenho sem pivot, é uma coluna com o nome da turma. É um campo STRING. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
luisgustavogomes Postado 20 de Outubro de 2021 Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 470 Conteúdo/Dia: 0.21 Reputação: 132 Pontos/Conquistas: 3.143 Conteúdo Resolvido: 0 Dias Ganho: 63 Status: Offline Idade: 35 Dispositivo: Windows Denunciar Compartilhar Postado 20 de Outubro de 2021 @Alef Menezes, Bom dia. Vamos por parte já dizia jack!!! eu tentei executar sua solução, mas não consegui adapta-la a minha solução. Na questão do Intervalo, ele não precisa aparecer. R. A questão da montagem da lógica para aqueles teste, pode ser aplicado na sua consulta com CTE, porém criei a tabela de horário fixa, juntamente para a matriz, logo, como não trabalho com o educacional, acredito, que tenhamos uma tabela que possamos fazer a mesma lógica.... sobre o intervalo, tranquilo só repliquei seu exemplo do print. Caso precise de uma ajuda é só me achar no skype luisgustavogomes@outlook.com... Consegui gerar com PIVOT como você me aconselhou a tabela de horário, porém as linhas "fantasmas" dos horários que o professor não tem aula elas são o desafio. R. Soma 0 (Zero). E a posterior, tenho um segundo problema no período noturno, tenho dois tipos de horarios: aulas de 50 minutos e outras de 1 hora. só que existe uma equivalência na tabela que terei que tratar, provavelmente criando 2 sql a parte um para cada horário e ao invez de gerar 3 tabelas irei gerar 4, um para cada horário, sem fazer o "de - para" no código noturno. R. Aqui teríamos que ajustar a logica, da consulta. Porém no fim disso tudo, se existe-se uma forma de utilizar no RM - SGE expressão, forçando que "Se CODIGO_HORARIO = X ENTÃO NMTURMA", resolveria todos os problemas, atenderia minha usuária e o trabalho só seria realmente formatação de texto e adição das expressões a tabela. R. Se sua consulta já está fazendo o PIVOT com a sua logica de código... só um IF todas as possibilidades para cada dia da semana, porém de já aviso que isso tornará o relatório lento, pois para cada linha... cada campo... o compilador tem que validar.. abraços Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Alef Menezes Postado 20 de Outubro de 2021 Tópicos Que Criei: 1 Tópicos/Dia: 0.00 Meu Conteúdo: 6 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 41 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Autor Denunciar Compartilhar Postado 20 de Outubro de 2021 Não entendi muito bem, pois sou iniciante. Vou te chamar no Skype e facilitar para ambos. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Participe da conversa
Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.