Usuário com melhor resposta
Procedure

Pergunta
-
Como posso montar uma procedure com esse consulta
with CTE_Count as ( SELECT 'ADMISSAO' = count(case when usu_afast <> '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'DEMISSAO' = COUNT(case when usu_afast = '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'ADM + DEM' = COUNT(case when usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'TOTAL GERAL' = COUNT(case when usu_afast <> '7' then 1 end) FROM [vetorh_homolog].[dbo].[usu_tkpicol] ) select * ,[ADM + DEM] / 2 / [TOTAL GERAL] from CTE_Count
Respostas
-
Olá Marco,
veja se atende:
create procedure USP_NOME as begin with CTE_Count as ( SELECT 'ADMISSAO' = count(case when usu_afast <> '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'DEMISSAO' = COUNT(case when usu_afast = '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'ADM + DEM' = COUNT(case when usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'TOTAL GERAL' = COUNT(case when usu_afast <> '7' then 1 end) FROM [vetorh_homolog].[dbo].[usu_tkpicol] ) select * ,[ADM + DEM] / 2 / [TOTAL GERAL] from CTE_Count end
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 1 de agosto de 2017 15:59
Todas as Respostas
-
Olá Marco,
veja se atende:
create procedure USP_NOME as begin with CTE_Count as ( SELECT 'ADMISSAO' = count(case when usu_afast <> '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'DEMISSAO' = COUNT(case when usu_afast = '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'ADM + DEM' = COUNT(case when usu_datref BETWEEN '20170101' and '20170131' then 1 end) ,'TOTAL GERAL' = COUNT(case when usu_afast <> '7' then 1 end) FROM [vetorh_homolog].[dbo].[usu_tkpicol] ) select * ,[ADM + DEM] / 2 / [TOTAL GERAL] from CTE_Count end
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 1 de agosto de 2017 15:59
-
Boa Tarde
fiz assim está certo
USE [MaquinaPadrao]
GO
/****** Object: StoredProcedure [dbo].[sp_rh_turnover] Script Date: 01/08/2017 10:47:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Object: StoredProcedure [dbo].[sp_rh_turnover] Script Date: 01/08/2017 10:47:04 ******/
/****** Desenvolvido por: Marco Pessolato ******/
/****** Objetivo: ******/
--Apresentar Admissão demissão de funcionarios ******/
/****** Uso: Máquina Padrão ******/
/****** Origem de Dados: Senior -
[vetorh_homolog].[dbo].[usu_tkpicol]) ******/
CREATE PROCEDURE [dbo].[sp_rh_turnover]
@HFMENTITY NVARCHAR(max),
@CUSTOMERGROUP NVARCHAR(max),
@divisao nvarchar(max),
@distrito nvarchar(max),
@setor nvarchar(max),
@competencia nvarchar(06), --MMYYYY
@tipografico nvarchar(01)
AS
SET NOCOUNT ON
DECLARE @tempHFM as table (value varchar(100) PRIMARY key)
DECLARE @tempCUSTOMER as table (value varchar(100) PRIMARY key)
DECLARE @tempDIVISAO as table (value varchar(100) PRIMARY key)
DECLARE @tempDISTRITO as table (value varchar(100) PRIMARY key)
DECLARE @tempSetor as table (value varchar(100) PRIMARY key)
DECLARE @tipografico as table (value varchar(01) PRIMARY key)
--hfm
INSERT INTO @tempHFM SELECT DISTINCT value from fn_Split (@HFMENTITY,',')
--customer
INSERT INTO @tempCUSTOMER SELECT DISTINCT value from fn_Split (@CUSTOMERGROUP,',')
--divisao
INSERT INTO @tempDIVISAO SELECT DISTINCT value from fn_Split (@divisao,',')
--distrito
INSERT INTO @tempDISTRITO SELECT DISTINCT value from fn_Split (@distrito,',')
--setor
INSERT INTO @tempSetor SELECT DISTINCT value from fn_Split (@setor,',')
--grafico
INSERT INTO @temptipografico SELECT DISTINCT value from fn_Split (@tipografico,',')
as
begin
with CTE_Count as
(
SELECT
'ADMISSAO' = count(case when usu_afast <> '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end)
,'DEMISSAO' = COUNT(case when usu_afast = '7' AND usu_datref BETWEEN '20170101' and '20170131' then 1 end)
,'ADM + DEM' = COUNT(case when usu_datref BETWEEN '20170101' and '20170131' then 1 end)
,'TOTAL GERAL' = COUNT(case when usu_afast <> '7' then 1 end)
FROM [vetorh_homolog].[dbo].[usu_tkpicol]
)
select
*
,[ADM + DEM] / 2 / [TOTAL GERAL]
from CTE_Count
end -
em termos de sintaxe fica assim
GO /****** Object: StoredProcedure [dbo].[sp_rh_turnover] Script Date: 01/08/2017 10:47:04 ******/ SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO /****** Object: StoredProcedure [dbo].[sp_rh_turnover] Script Date: 01/08/2017 10:47:04 ******/ /****** Desenvolvido por: Marco Pessolato ******/ /****** Objetivo: ******/ --Apresentar Admissão demissão de funcionarios ******/ /****** Uso: Máquina Padrão ******/ /****** Origem de Dados: Senior - [vetorh_homolog].[dbo].[usu_tkpicol]) ******/ CREATE PROCEDURE [dbo].[sp_rh_turnover] @HFMENTITY NVARCHAR(MAX) , @CUSTOMERGROUP NVARCHAR(MAX) , @divisao NVARCHAR(MAX) , @distrito NVARCHAR(MAX) , @setor NVARCHAR(MAX) , @competencia NVARCHAR(06) , --MMYYYY @tipografico NVARCHAR(01) AS SET NOCOUNT ON; DECLARE @tempHFM AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempCUSTOMER AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempDIVISAO AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempDISTRITO AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempSetor AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @temptipografico AS TABLE ( value VARCHAR(01) PRIMARY KEY ); --hfm INSERT INTO @tempHFM SELECT DISTINCT value FROM fn_Split(@HFMENTITY, ','); --customer INSERT INTO @tempCUSTOMER SELECT DISTINCT value FROM fn_Split(@CUSTOMERGROUP, ','); --divisao INSERT INTO @tempDIVISAO SELECT DISTINCT value FROM fn_Split(@divisao, ','); --distrito INSERT INTO @tempDISTRITO SELECT DISTINCT value FROM fn_Split(@distrito, ','); --setor INSERT INTO @tempSetor SELECT DISTINCT value FROM fn_Split(@setor, ','); --grafico INSERT INTO @temptipografico SELECT DISTINCT value FROM fn_Split(@tipografico, ','); WITH CTE_Count AS ( SELECT 'ADMISSAO' = COUNT(CASE WHEN usu_afast <> '7' AND usu_datref BETWEEN '20170101' AND '20170131' THEN 1 END) , 'DEMISSAO' = COUNT(CASE WHEN usu_afast = '7' AND usu_datref BETWEEN '20170101' AND '20170131' THEN 1 END) , 'ADM + DEM' = COUNT(CASE WHEN usu_datref BETWEEN '20170101' AND '20170131' THEN 1 END) , 'TOTAL GERAL' = COUNT(CASE WHEN usu_afast <> '7' THEN 1 END) FROM [vetorh_homolog].[dbo].[usu_tkpicol] ) SELECT * , [ADM + DEM] / 2 / [TOTAL GERAL] FROM CTE_Count;
entretanto tem muita coisa estranha ainda
vc tem 6 tabelas virtuais
DECLARE @tempHFM AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempCUSTOMER AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempDIVISAO AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempDISTRITO AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempSetor AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @temptipografico AS TABLE
(
value VARCHAR(01) PRIMARY KEY
);que não estão sendo usada em nenhuma logica sua( pelo que vc postou )
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
-
em termos de sintaxe fica assim
GO /****** Object: StoredProcedure [dbo].[sp_rh_turnover] Script Date: 01/08/2017 10:47:04 ******/ SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO /****** Object: StoredProcedure [dbo].[sp_rh_turnover] Script Date: 01/08/2017 10:47:04 ******/ /****** Desenvolvido por: Marco Pessolato ******/ /****** Objetivo: ******/ --Apresentar Admissão demissão de funcionarios ******/ /****** Uso: Máquina Padrão ******/ /****** Origem de Dados: Senior - [vetorh_homolog].[dbo].[usu_tkpicol]) ******/ CREATE PROCEDURE [dbo].[sp_rh_turnover] @HFMENTITY NVARCHAR(MAX) , @CUSTOMERGROUP NVARCHAR(MAX) , @divisao NVARCHAR(MAX) , @distrito NVARCHAR(MAX) , @setor NVARCHAR(MAX) , @competencia NVARCHAR(06) , --MMYYYY @tipografico NVARCHAR(01) AS SET NOCOUNT ON; DECLARE @tempHFM AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempCUSTOMER AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempDIVISAO AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempDISTRITO AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @tempSetor AS TABLE ( value VARCHAR(100) PRIMARY KEY ); DECLARE @temptipografico AS TABLE ( value VARCHAR(01) PRIMARY KEY ); --hfm INSERT INTO @tempHFM SELECT DISTINCT value FROM fn_Split(@HFMENTITY, ','); --customer INSERT INTO @tempCUSTOMER SELECT DISTINCT value FROM fn_Split(@CUSTOMERGROUP, ','); --divisao INSERT INTO @tempDIVISAO SELECT DISTINCT value FROM fn_Split(@divisao, ','); --distrito INSERT INTO @tempDISTRITO SELECT DISTINCT value FROM fn_Split(@distrito, ','); --setor INSERT INTO @tempSetor SELECT DISTINCT value FROM fn_Split(@setor, ','); --grafico INSERT INTO @temptipografico SELECT DISTINCT value FROM fn_Split(@tipografico, ','); WITH CTE_Count AS ( SELECT 'ADMISSAO' = COUNT(CASE WHEN usu_afast <> '7' AND usu_datref BETWEEN '20170101' AND '20170131' THEN 1 END) , 'DEMISSAO' = COUNT(CASE WHEN usu_afast = '7' AND usu_datref BETWEEN '20170101' AND '20170131' THEN 1 END) , 'ADM + DEM' = COUNT(CASE WHEN usu_datref BETWEEN '20170101' AND '20170131' THEN 1 END) , 'TOTAL GERAL' = COUNT(CASE WHEN usu_afast <> '7' THEN 1 END) FROM [vetorh_homolog].[dbo].[usu_tkpicol] ) SELECT * , [ADM + DEM] / 2 / [TOTAL GERAL] FROM CTE_Count;
entretanto tem muita coisa estranha ainda
vc tem 6 tabelas virtuais
DECLARE @tempHFM AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempCUSTOMER AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempDIVISAO AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempDISTRITO AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @tempSetor AS TABLE
(
value VARCHAR(100) PRIMARY KEY
);
DECLARE @temptipografico AS TABLE
(
value VARCHAR(01) PRIMARY KEY
);que não estão sendo usada em nenhuma logica sua( pelo que vc postou )
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley,
Também não entendi o porque a utilização destas tabelas.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Eu também não Junior , por isso que fiz essa indagação ,se a procedure por apenas o trecho postado , não faz sentido criar tabelas para não fazer nada , entretanto temos que saber se existe mais código , que faz o uso destas , por isso apenas repliquei corrigindo a sintaxe
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves