Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nicolasrds

Formatar a query para trazer em coluna ao invés da linha

Recommended Posts

Pessoal, Como faço para formatar a query abaixo para trazer a primeira 'data_entrada' com a primeira 'data_saida' ?!?

Atualmente minha query está trazendo como linha, gostaria de trazer como coluna.

select
  atendimento,
  paciente,
  data_internacao,
  data_entrada,
  data_saida
  from
(
-- TRANSFERIDO PARA(SAIDA)
select atendime.cd_atendimento atendimento,
       paciente.nm_paciente paciente,
       trunc(atendime.dt_atendimento) data_internacao,
       ' ' data_entrada,
       to_char(mov_int.hr_mov_int,'dd/mm/yyyy hh24:mi') data_saida,
       trunc(mov_int.dt_mov_int) data_pesquisa,
       unid_int.ds_unid_int unidade_internacao
       from mov_int
       inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
       inner join leito leito_origem on leito_origem.cd_leito = mov_int.cd_leito_anterior
       inner join unid_int on leito_origem.cd_unid_int = unid_int.cd_unid_int
       inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
       inner join paciente on  atendime.cd_paciente = paciente.cd_paciente
where  mov_int.tp_mov = 'O'
and atendime.tp_atendimento = 'I'
and leito_origem.cd_unid_int != leito_destino.cd_unid_int
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
union all
-- TRANSFERIDO DE(ENTRADA)
select atendime.cd_atendimento atendimento,
       paciente.nm_paciente paciente,
       trunc(atendime.dt_atendimento) data_internacao,
       to_char(mov_int.hr_mov_int, 'dd/mm/yyy hh24:mi')  data_entrada,
       ' '                                                data_saida,
       trunc(mov_int.dt_mov_int) data_pesquisa,
       unid_int.ds_unid_int unidade_internacao
       from mov_int
       inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
       inner join leito leito_origem on leito_origem.cd_leito = mov_int.cd_leito_anterior
       inner join unid_int on leito_destino.cd_unid_int = unid_int.cd_unid_int
       inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
       inner join paciente on  atendime.cd_paciente = paciente.cd_paciente
where  mov_int.tp_mov = 'O'
and atendime.tp_atendimento = 'I'
and leito_origem.cd_unid_int != leito_destino.cd_unid_int
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
union all
--INTERNACAO(ENTRADA)
select atendime.cd_atendimento atendimento,
       paciente.nm_paciente paciente,
       trunc(atendime.dt_atendimento) data_internacao,
       to_char(mov_int.hr_mov_int, 'dd/mm/yyy hh24:mi')  data_entrada,
       ' '                                                data_saida,
       trunc(mov_int.dt_mov_int) data_pesquisa,
       unid_int.ds_unid_int unidade_internacao
       from mov_int
       inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
       inner join unid_int on leito_destino.cd_unid_int = unid_int.cd_unid_int
       inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
       inner join paciente on  atendime.cd_paciente = paciente.cd_paciente
where mov_int.tp_mov = 'I'
and atendime.tp_atendimento = 'I'
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
union all
--ALTA(SAIDA)
select atendime.cd_atendimento atendimento,
       paciente.nm_paciente paciente,
       trunc(atendime.dt_atendimento) data_internacao,
       ' ' data_entrada,
       to_char(atendime.hr_alta,'dd/mm/yyyy hh24:mi') data_saida,
       trunc(atendime.dt_alta) data_pesquisa,
       unid_int.ds_unid_int unidade_internacao
       from atendime
       inner join paciente on  atendime.cd_paciente = paciente.cd_paciente
       inner join leito on leito.cd_leito = atendime.cd_leito
       inner join unid_int on leito.cd_unid_int = unid_int.cd_unid_int
       inner join mot_alt  on atendime.cd_mot_alt = mot_alt.cd_mot_alt
where atendime.tp_atendimento = 'I') 
where data_pesquisa between '01/10/2016' and '31/10/2016' 
and unidade_internacao = 'UNIDADE A'
and atendimento = 102866
order by data_pesquisa; 

Resultado atual:

Atendimento | Paciente | Data_internacao| Data_entrada | Data_saida |
102866 NICOLAS RODRIGUES 22/10/16 24/10/016 01:53
102866 NICOLAS RODRIGUES 22/10/16 27/10/016 17:44
102866 NICOLAS RODRIGUES 22/10/16 27/10/2016 16:13
102866 NICOLAS RODRIGUES 22/10/16 30/10/2016 18:31
A ideia é trazer da seguinte forma:
Atendimento | Paciente | Data_internacao| Data_entrada | Data_saida |
102866 NICOLAS RODRIGUES 22/10/16 24/10/016 01:53 27/10/2016 16:13
102866 NICOLAS RODRIGUES 22/10/16 27/10/016 17:44 30/10/2016 18:31
Desde já agradeço pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, não testei, mas veja se funciona

whit x as(
-- TRANSFERIDO PARA(SAIDA)
select atendime.cd_atendimento atendimento,
paciente.nm_paciente paciente,
trunc(atendime.dt_atendimento) data_internacao,
' ' data_entrada,
to_char(mov_int.hr_mov_int,'dd/mm/yyyy hh24:mi') data_saida,
trunc(mov_int.dt_mov_int) data_pesquisa,
unid_int.ds_unid_int unidade_internacao
from mov_int
inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
inner join leito leito_origem on leito_origem.cd_leito = mov_int.cd_leito_anterior
inner join unid_int on leito_origem.cd_unid_int = unid_int.cd_unid_int
inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
inner join paciente on atendime.cd_paciente = paciente.cd_paciente
where mov_int.tp_mov = 'O'
and atendime.tp_atendimento = 'I'
and leito_origem.cd_unid_int != leito_destino.cd_unid_int
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
union all
-- TRANSFERIDO DE(ENTRADA)
select atendime.cd_atendimento atendimento,
paciente.nm_paciente paciente,
trunc(atendime.dt_atendimento) data_internacao,
to_char(mov_int.hr_mov_int, 'dd/mm/yyy hh24:mi') data_entrada,
' ' data_saida,
trunc(mov_int.dt_mov_int) data_pesquisa,
unid_int.ds_unid_int unidade_internacao
from mov_int
inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
inner join leito leito_origem on leito_origem.cd_leito = mov_int.cd_leito_anterior
inner join unid_int on leito_destino.cd_unid_int = unid_int.cd_unid_int
inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
inner join paciente on atendime.cd_paciente = paciente.cd_paciente
where mov_int.tp_mov = 'O'
and atendime.tp_atendimento = 'I'
and leito_origem.cd_unid_int != leito_destino.cd_unid_int
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
union all
--INTERNACAO(ENTRADA)
select atendime.cd_atendimento atendimento,
paciente.nm_paciente paciente,
trunc(atendime.dt_atendimento) data_internacao,
to_char(mov_int.hr_mov_int, 'dd/mm/yyy hh24:mi') data_entrada,
' ' data_saida,
trunc(mov_int.dt_mov_int) data_pesquisa,
unid_int.ds_unid_int unidade_internacao
from mov_int
inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
inner join unid_int on leito_destino.cd_unid_int = unid_int.cd_unid_int
inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
inner join paciente on atendime.cd_paciente = paciente.cd_paciente
where mov_int.tp_mov = 'I'
and atendime.tp_atendimento = 'I'
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
union all
--ALTA(SAIDA)
select atendime.cd_atendimento atendimento,
paciente.nm_paciente paciente,
trunc(atendime.dt_atendimento) data_internacao,
' ' data_entrada,
to_char(atendime.hr_alta,'dd/mm/yyyy hh24:mi') data_saida,
trunc(atendime.dt_alta) data_pesquisa,
unid_int.ds_unid_int unidade_internacao
from atendime
inner join paciente on atendime.cd_paciente = paciente.cd_paciente
inner join leito on leito.cd_leito = atendime.cd_leito
inner join unid_int on leito.cd_unid_int = unid_int.cd_unid_int
inner join mot_alt on atendime.cd_mot_alt = mot_alt.cd_mot_alt
where atendime.tp_atendimento = 'I')
where data_pesquisa between '01/10/2016' and '31/10/2016'
and unidade_internacao = 'UNIDADE A'
and atendimento = 102866)
select x.atendimento,
x.paciente,
x.data_internacao,
min(x.data_entrada) data_entrada,
min(x.data_saida) data_saida
from x
group by x.atendimento, x.paciente, x.data_internacao

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma GROUP BY com MIN e MAX deve resolver

select
  atendimento,
  paciente,
  data_internacao,
  min(data_entrada),
  max(data_saida)
  from
(
-- TRANSFERIDO PARA(SAIDA)
select atendime.cd_atendimento atendimento,
       paciente.nm_paciente paciente,
...
where atendime.tp_atendimento = 'I')
where data_pesquisa between '01/10/2016' and '31/10/2016'
and unidade_internacao = 'UNIDADE A'
and atendimento = 102866
group by  atendimento,
  paciente,
  data_internacao  
order by data_pesquisa;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal boa noite,

Com os agrupamentos não deu certo, mas me deu uma ideia e acabei resolvendo de um outro jeito.

De qualquer forma vlw. vocês são feras :D

select atendimento,
       paciente, 
       data_internacao,
       data_entrada,
       data_saida,
from
(
-- TRANSFERIDO DE(ENTRADA)
select atendime.cd_atendimento atendimento,
       paciente.nm_paciente paciente,
       unid_int.ds_unid_int unidade_internacao,
       trunc(atendime.dt_atendimento) data_internacao,
       leito_origem.ds_resumo origem,
       leito_destino.ds_resumo destino,
       mov_int.hr_mov_int  data_entrada,
       case when(select min(m2.hr_mov_int) from mov_int m2 where m2.cd_leito_anterior = mov_int.cd_leito 
            and m2.cd_atendimento = mov_int.cd_atendimento 
            and m2.hr_mov_int > mov_int.hr_mov_int) is null
       then (select at.hr_alta from atendime at where at.cd_atendimento = mov_int.cd_atendimento 
            and at.cd_mot_alt is not null 
            and at.hr_alta > mov_int.hr_mov_int)
       else (select  min(m2.hr_mov_int) from mov_int m2 where m2.cd_leito_anterior = mov_int.cd_leito 
            and m2.cd_atendimento = mov_int.cd_atendimento 
            and m2.hr_mov_int > mov_int.hr_mov_int) end  data_saida
       from mov_int
       inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
       inner join leito leito_origem on leito_origem.cd_leito = mov_int.cd_leito_anterior
       inner join unid_int on leito_destino.cd_unid_int = unid_int.cd_unid_int
       inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
       inner join paciente on  atendime.cd_paciente = paciente.cd_paciente
where  mov_int.tp_mov = 'O'
and atendime.tp_atendimento = 'I'
and leito_origem.cd_unid_int != leito_destino.cd_unid_int
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
union all
--INTERNACAO(ENTRADA)
select atendime.cd_atendimento atendimento,
       paciente.nm_paciente paciente,
       unid_int.ds_unid_int unidade_internacao,
       trunc(atendime.dt_atendimento) data_internacao,
       ' ' origem,
       leito_destino.ds_resumo destino,
       mov_int.hr_mov_int  data_entrada,
       case when(select min(m2.hr_mov_int) from mov_int m2 where m2.cd_leito_anterior = mov_int.cd_leito 
            and m2.cd_atendimento = mov_int.cd_atendimento 
            and m2.hr_mov_int > mov_int.hr_mov_int) is null
       then (select at.hr_alta from atendime at where at.cd_atendimento = mov_int.cd_atendimento 
            and at.cd_mot_alt is not null 
            and at.hr_alta > mov_int.hr_mov_int)
       else (select  min(m2.hr_mov_int) from mov_int m2 where m2.cd_leito_anterior = mov_int.cd_leito 
            and m2.cd_atendimento = mov_int.cd_atendimento 
            and m2.hr_mov_int > mov_int.hr_mov_int) end  data_saida
       from mov_int
       inner join leito leito_destino on leito_destino.cd_leito = mov_int.cd_leito
       inner join unid_int on leito_destino.cd_unid_int = unid_int.cd_unid_int
       inner join atendime on mov_int.cd_atendimento = atendime.cd_atendimento
       inner join paciente on  atendime.cd_paciente = paciente.cd_paciente
where mov_int.tp_mov = 'I'
and atendime.tp_atendimento = 'I'
and unid_int.sn_ativo = 'S'
and trunc(nvl(mov_int.dt_lib_mov, sysdate)) >= trunc(mov_int.dt_mov_int)
)where data_entrada between '01/10/2016' and '31/10/2016'
 and unidade_internacao = 'UNIDADE A'
 and atendimento = 102866;

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por FabianoSouza
      Eu preciso exibir duas informações em minha consulta:
      1) A quantidade de pessoas inscritas numa turma de treinamento (isso é feito com um simples COUNT)
      2) Uma flag de excesso de inscrições na turma. Seria obtido pela comparação entre a quantidade máxima permitida (já existe esse campo) e o COUNT feito acima.
       
      Até aqui sem problemas.
       
      O que quero é evitar fazer duas contagens (1 para saber a quantidade de inscritos, e outra para gerar a flag de excesso de inscrições).
       
      Há uma forma de utilizar UMA contagem para atender as duas necessidades?
       
      Meu código está assim:
       
      ... --AQUI FAZ A COMPARAÇÃO PARA GERAR A FLAG DE EXCESSO DE INSCRIÇÕES , CASE WHEN (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) > T.lotacaoMax Then T.nome + '&nbsp;'+'<span class=%22icon-aviso fcolor-critico%22 style=%22font-size:18px%22 title=Excesso&nbsp;de&nbsp;inscrições></span>' --AQUI FAZ A CONTAGEM DE INSCRIÇÕES , (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) AS 'Inscrições'  
    • Por FabianoSouza
      Possuo uma coluna de data.
      Eu gostaria que os registros com datas futuras aparecessem no topo do meu select, em relação aos demais registros.
      Em seguida, gostaria que somente esses registros com datas futuras ficassem em ordem crescente.
      Algo como 
       
      João  | 16/11/2023
      Maria | 17/11/2023
      José  |  20/11/2023
       
      -----------------------------
      (demais registros da base)
      Antônio   |  20/05/2023
      Rosa        | 15/08/2023
      Cida         | 15/10/2022
      Pedro      |  20/05/2021
      Paulo      |  14/11/2020
       
      O select seria esse.
      select dbo.formataData(ET.dataInicial) AS 'data' FROM dbo.tab AS ET GROUP BY ET.dataInicial  
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse resultado do array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.