Qual melhor método pra chegar no resultado explicado abaixo?

Pessoal, tudo bem? Então, cheguei num impasse e não consigo mudar meu código pra funcionar.

Preciso que resultado dessa Query me traga os pacientes internados que possuem o documento de prontuário X.

A Query é a seguinte:

    SELECT DISTINCT
  A.cd_atendimento Cd_Atendimento,
  TO_CHAR(A.dt_atendimento, 'dd/mm/yyyy') Data_Atendimento,
  P.nm_paciente Nome_Paciente,
  P.cd_paciente prontuario,
  U.ds_localizacao Localizacao,
  L.ds_leito Leito,
  A.cd_convenio Cd_Convenio,
  C.nm_convenio convenio,
  DECODE(A.dt_alta_medica, NULL, 'INTERNADO', 'ALTA MEDICA') Alta_medica
FROM leito L,
  atendime A,
  paciente P,
  unid_int U,
  convenio C,
  DBAMV.PW_DOCUMENTO_CLINICO DC,
  DBAMV.PW_EDITOR_CLINICO EC,
  DBAMV.EDITOR_REGISTRO_CAMPO ER,
  DBAMV.EDITOR_CAMPO EK
WHERE L.cd_leito            = A.cd_leito
AND A.cd_convenio           = C.cd_convenio
AND A.cd_paciente           = P.cd_paciente
AND L.cd_unid_int           = U.cd_unid_int
AND DC.CD_DOCUMENTO_CLINICO = EC.CD_DOCUMENTO_CLINICO (+)
AND EC.CD_EDITOR_REGISTRO   = ER.CD_REGISTRO(+)
AND ER.CD_CAMPO             = EK.CD_CAMPO
AND EC.Cd_Documento         = 1262    */Aqui é onde eu filtro a prioridade de todos os pacientes internados desde que tenham esse prontuário vinculado */
AND DC.Tp_Status           != 'CANCELADO'
AND EK.Ds_Identificador     = 'Paciente_acompanhado_1'
AND A.tp_atendimento       IN ('I','U','E')
AND TRUNC(A.dt_alta)       IS NULL
AND A.cd_atendimento       != 16
AND TRUNC(A.dt_atendimento) = TO_DATE('25/03/2019' , 'dd/mm/yyyy')
AND P.NM_PACIENTE NOT LIKE 'RN %'
ORDER BY P.nm_paciente;

obs: As tebelas DC, EC, ER e EK representam tabelas onde se guardam os registros de vários tipos de prontuários, e tmb tabelas que guardam os campos desses prontuários.

O resultado sai certinho. Todos os pacientes internados no dia 25 que tem o documento 1262 vinculado, e por terem o documento 1262 vinculado, são tratados como “PRIORIDADE” porém preciso que todos os que não tem o documento 1262 sejam tratados como “SEM PRIORIDADE”.

A lógica é essa, que a Query retorne a relação de pacientes internados e exiba quem tem prioridade e que não tem prioridade.

Alguém consegue me ajudar? Obrigado :slight_smile:

Gente, alguém pra me dar uma luz?

Rapaz, não consigo te ajudar nessa. Mas que tamanho de query, em? Tá doido.

Up pra ver se alguém ajuda o jovem.

[]'s

2 curtidas

Hahaha, é muita tabela pra amarrar xD

Você precisa retornar uma coluna a mais indicando a prioridade (COM e SEM prioridade), certo?

Isso! Baseado nesse critério, se tiver o documento 1262 = prioridade, se não tiver (porque vai existir outros zilhoes associados) significa sem prioridade

SELECT DISTINCT
	A.cd_atendimento Cd_Atendimento,
	TO_CHAR(A.dt_atendimento, 'dd/mm/yyyy') Data_Atendimento,
	P.nm_paciente Nome_Paciente,
	P.cd_paciente prontuario,
	U.ds_localizacao Localizacao,
	L.ds_leito Leito,
	A.cd_convenio Cd_Convenio,
	C.nm_convenio convenio,
	DECODE(A.dt_alta_medica, NULL, 'INTERNADO', 'ALTA MEDICA') Alta_medica,
	CASE EC.Cd_Documento
		WHEN 1262 THEN 'PRIORIDADE'
		ELSE 'SEM PRIORIDADE'
	END
FROM
	leito L,
	atendime A,
	paciente P,
	unid_int U,
	convenio C,
	DBAMV.PW_DOCUMENTO_CLINICO DC,
	DBAMV.PW_EDITOR_CLINICO EC,
	DBAMV.EDITOR_REGISTRO_CAMPO ER,
	DBAMV.EDITOR_CAMPO EK
WHERE
	L.cd_leito            = A.cd_leito
	AND A.cd_convenio           = C.cd_convenio
	AND A.cd_paciente           = P.cd_paciente
	AND L.cd_unid_int           = U.cd_unid_int
	AND DC.CD_DOCUMENTO_CLINICO = EC.CD_DOCUMENTO_CLINICO (+)
	AND EC.CD_EDITOR_REGISTRO   = ER.CD_REGISTRO(+)
	AND ER.CD_CAMPO             = EK.CD_CAMPO
	--AND EC.Cd_Documento         = 1262    */Aqui é onde eu filtro a prioridade de todos os pacientes internados desde que tenham esse prontuário vinculado */
	AND DC.Tp_Status           != 'CANCELADO'
	AND EK.Ds_Identificador     = 'Paciente_acompanhado_1'
	AND A.tp_atendimento       IN ('I','U','E')
	AND TRUNC(A.dt_alta)       IS NULL
	AND A.cd_atendimento       != 16
	AND TRUNC(A.dt_atendimento) = TO_DATE('25/03/2019' , 'dd/mm/yyyy')
	AND P.NM_PACIENTE NOT LIKE 'RN %'
ORDER BY
	P.nm_paciente;

Como irá retornar todos, comentei esse AND:

AND EC.Cd_Documento         = 1262

A ideia que tive eh bem tosca, mas talvez atenda sua necessidade kkkk

1 curtida

Seguindo a sua ideia junto com a solução do @Lucas_Camara, não ficaria mais elegante você montar essa sua Query com Joins ao invés de jogar tudo no From?
Vai diminuir muito as comparações dentro da cláusula Where e, no meu ponto de vista vai diminuir consideravelmente a complexidade da Query em uma visão geral.

Apenas uma sugestão, fica a seu critério.

2 curtidas

Sim sim! Tenho pouca vivência prática com banco de dados, então toda sugestão com quem já entende é super válida, até mesmo pra que eu possa aprimorar minha lógica :slight_smile: