Criar Função SQL com Procedure;
30/05/2017
0
Pessoal boa tarde!! Estou com dificuldade de criar uma Função SQL com minha procedure conforme abaixo, poderiam me auxiliar, lembrando que as colunas de retorno é dinâmica de acordo com as datas informadas nos parâmetros; Pode ter 10 colunas como 100 colunas o resultado;
declare @datainicio DateTime
declare @dataFim DateTime
set @datainicio = '20150201'
set @datafim = '20160601'
declare @values as nvarchar(max)
SELECT @values = STUFF(( SELECT
'],[' + right('00' + CONVERT(VARCHAR,RPF_CdiMes),2) +'-'+ CONVERT(VARCHAR,RPF_DtiAno)
FROM ConRCDiasPontoEventosFins
WHERE RPF_CdiContratado in (158534,182370)
and ( (RPF_DtiAno * 100) + RPF_CdiMes >= (YEAR(@DataInicio)*100) + MONTH(@DataInicio) )
AND ( (Rpf_DtiAno * 100) + Rpf_CdiMes <= (YEAR(@DataFim) *100) + MONTH(@DataFim ) )
group by '],[' + right('00' + CONVERT(VARCHAR,RPF_CdiMes),2) + CONVERT(VARCHAR,RPF_DtiAno),
RPF_DtiAno,
RPF_CdiMes
ORDER BY RPF_DtiAno,RPF_CdiMes
FOR XML PATH('')
), 1, 2, '') + ']'
--Select @values
--- Esqueleto da query com os marcadores: Passo 2
declare @query as nvarchar(max)
set @query = 'Select Id,Nome ,Evento,|@
from
(
SELECT
RPF_CdiContratado Id,
CON_DssNome Nome,
EAP_D1sEventoPonto Evento,
right(''00'' + CONVERT(VARCHAR,RPF_CdiMes),2) +''-'' + CONVERT(VARCHAR,RPF_DtiAno)COLUNA,
RPF_QtnEventoPonto
FROM ConRCDiasPontoEventosFins
INNER JOIN Contratados ON (CON_CdiContratado = RPF_CdiContratado )
INNER JOIN EventosPonto ON (EAP_CdiEventoPonto = RPF_CdiEventoPonto)
WHERE RPF_CdiContratado in (158534,182370)
AND (RPF_DtiAno * 100) + RPF_CdiMes >= '+ convert(varchar,(YEAR(@DataInicio)*100) + MONTH(@DataInicio)) +'
AND (Rpf_DtiAno * 100) + Rpf_CdiMes <= '+ convert(varchar,(YEAR(@DataFim) *100) + MONTH(@DataFim )) +'
) PT
PIVOT
( SUM(RPF_QtnEventoPonto) for COLUNA in ( |@ )) pvt order by Nome'
set @query = REPLACE(@query,'|@',@values)
--- Executando a query
exec(@query)
declare @datainicio DateTime
declare @dataFim DateTime
set @datainicio = '20150201'
set @datafim = '20160601'
declare @values as nvarchar(max)
SELECT @values = STUFF(( SELECT
'],[' + right('00' + CONVERT(VARCHAR,RPF_CdiMes),2) +'-'+ CONVERT(VARCHAR,RPF_DtiAno)
FROM ConRCDiasPontoEventosFins
WHERE RPF_CdiContratado in (158534,182370)
and ( (RPF_DtiAno * 100) + RPF_CdiMes >= (YEAR(@DataInicio)*100) + MONTH(@DataInicio) )
AND ( (Rpf_DtiAno * 100) + Rpf_CdiMes <= (YEAR(@DataFim) *100) + MONTH(@DataFim ) )
group by '],[' + right('00' + CONVERT(VARCHAR,RPF_CdiMes),2) + CONVERT(VARCHAR,RPF_DtiAno),
RPF_DtiAno,
RPF_CdiMes
ORDER BY RPF_DtiAno,RPF_CdiMes
FOR XML PATH('')
), 1, 2, '') + ']'
--Select @values
--- Esqueleto da query com os marcadores: Passo 2
declare @query as nvarchar(max)
set @query = 'Select Id,Nome ,Evento,|@
from
(
SELECT
RPF_CdiContratado Id,
CON_DssNome Nome,
EAP_D1sEventoPonto Evento,
right(''00'' + CONVERT(VARCHAR,RPF_CdiMes),2) +''-'' + CONVERT(VARCHAR,RPF_DtiAno)COLUNA,
RPF_QtnEventoPonto
FROM ConRCDiasPontoEventosFins
INNER JOIN Contratados ON (CON_CdiContratado = RPF_CdiContratado )
INNER JOIN EventosPonto ON (EAP_CdiEventoPonto = RPF_CdiEventoPonto)
WHERE RPF_CdiContratado in (158534,182370)
AND (RPF_DtiAno * 100) + RPF_CdiMes >= '+ convert(varchar,(YEAR(@DataInicio)*100) + MONTH(@DataInicio)) +'
AND (Rpf_DtiAno * 100) + Rpf_CdiMes <= '+ convert(varchar,(YEAR(@DataFim) *100) + MONTH(@DataFim )) +'
) PT
PIVOT
( SUM(RPF_QtnEventoPonto) for COLUNA in ( |@ )) pvt order by Nome'
set @query = REPLACE(@query,'|@',@values)
--- Executando a query
exec(@query)
Rene
Curtir tópico
+ 0
Responder
Posts
31/05/2017
Daniel Araújo
Bom dia Renê!
Você quer transforma esse código que já funciona em uma procedure, é isso?
Se for isso, é só envolver o seu código dentro de um bloco assim:
Se a resposta for útil não esqueça de dar um like!
Você quer transforma esse código que já funciona em uma procedure, é isso?
Se for isso, é só envolver o seu código dentro de um bloco assim:
CREATE PROCEDURE sp_nome_da_procudure AS BEGIN --COLOQUE O SEU CÓDIGO AQUI!!! END;
Se a resposta for útil não esqueça de dar um like!
Responder
31/05/2017
Rene
Bom dia!!!
Em procedure eu já consegui montar, na verdade quero que o meu código seja uma função SQL;
tipo assim
Create FUNCTION NomeFuncao (@IdContratado int,@datainicio datetime,@datafim datetime )
RETURNS table
AS
return
(Código)
Em procedure eu já consegui montar, na verdade quero que o meu código seja uma função SQL;
tipo assim
Create FUNCTION NomeFuncao (@IdContratado int,@datainicio datetime,@datafim datetime )
RETURNS table
AS
return
(Código)
Responder
Clique aqui para fazer login e interagir na Comunidade :)