PROCEDURE DE LISTAGEM DE DATAS

07/10/2016

0

Prezados, boa tarde.
Trabalho na área hospitalar e me foi solicitado desenvolver um INDICADOR em aplicativo próprio que apresente uma estatística de PACIENTE-DIA em um período.

Ao desenvolver tal INDICADOR, me deparei que este aplicativo não trabalha com DECLARE's e/ou FUNCTION's. Somente PROCEDURE.

Neste ponto, não consegui avançar, tendo em vista não conhecer o assunto.

Cheguei a desenvolver uma FUNCTION que no SQL SERVER 2008 rodou normalmente (funcionou).
Mas preciso de uma PROCEDURE mesmo.

Segue a idéia:

==============================================================================================================
Resultado esperado:
Paciente internado no dia 02/09/2016 e com alta em 05/09/2016 deverá trazer as linhas abaixo.
02/09/2016 4 - PACIENTES/DIA Clínica Médica 1 9 2 NULL
05/09/2016 4 - PACIENTES/DIA Clínica Médica 1 9 5 NULL
03/09/2016 4 - PACIENTES/DIA Clínica Médica 1 9 3 NULL
04/09/2016 4 - PACIENTES/DIA Clínica Médica 1 9 4 NULL

Uma linha para cada dia internado.

==============================================================================================================

Query desenvolvida:
select convert(varchar(MAX),VALOR,103)
, '4 - PACIENTES/DIA' DESCRICAO
, ES.DESCESPECGRUPO ESPECIALIDADE
, count(*) qtde
, MONTH (convert(varchar(MAX),VALOR,101)) MESES
, DAY (convert(varchar(MAX),VALOR,101)) DIAS
, P.CIDADE CIDADE

from dbo.fn_IntervaloDeDatas('2016-09-01','2016-09-05')
, SZATENDIMENTO as A
INNER JOIN SZPACIENTE AS P
ON A.CODPACIENTE = P.CODPACIENTE
INNER JOIN SZESPECIALIDADE ES
ON A.CODESPECGRUPO = ES.CODESPECGRUPO
where A.TIPOPACIENTE = 'I'
AND A.IDUNIDATEND IN (2)
AND A.DATASAIDA IS NULL ------------ B
and (A.DATAENTRADA <= '2016-09-05' --:PERIODOFINAL
OR A.DATAENTRADA <= '2016-09-01') --:PERIODOINICIAL
AND DAY (A.DATAENTRADA) <= DAY (convert(varchar(MAX),VALOR,101))
AND A.CODPACIENTE = 408727

group by
ES.DESCESPECGRUPO
, a.DATAENTRADA
, p.cidade
, dbo.fn_IntervaloDeDatas.VALOR

==============================================================================================================

Onde usando a Function (dbo.fn_IntervaloDeDatas('2016-09-01','2016-09-05')) me traz o resultado esperado.

Segue a Function:

USE [CorporeRM_Homolog]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[fn_IntervaloDeDatas] ( @valor_inicial DATETIME, @valor_final DATETIME )
RETURNS @tabela_de_intervalos TABLE ( valor DATETIME )
AS
BEGIN
WITH intervalo_de_inteiros(valor) AS
(
select @valor_inicial vi
union all
select valor + 1 from intervalo_de_inteiros
where valor + 1 <= @valor_final
)
INSERT INTO @tabela_de_intervalos
select * from intervalo_de_inteiros option (MAXRECURSION 0)

RETURN
END

==============================================================================================================

Como transformar essa Function em Procedure para que me traga o resultado acima demonstrado?

Grato
Carlos Cavalcanti
Carlos Cavalcanti

Carlos Cavalcanti

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar