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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar