Jump to content
Alef Menezes

Sem resultado na expressão if

Recommended Posts

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

sainda do banco.png

RELÁTORIO.png

Edited by Alef Menezes

Share this post


Link to post
Share on other sites

@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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

@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 

image.png

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.

  • Like 1

Share this post


Link to post
Share on other sites

@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? 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

@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.

1843773493_ResultSetcomPIVOT.thumb.png.460663853427bb878c751061eb1af6db.png

 

Share this post


Link to post
Share on other sites

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.

 

 

Share this post


Link to post
Share on other sites

@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

Share this post


Link to post
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
Reply to this topic...

×   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.


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.