none
Procedure RRS feed

  • 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

    terça-feira, 1 de agosto de 2017 15:05

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. :)

    terça-feira, 1 de agosto de 2017 15:14

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. :)

    terça-feira, 1 de agosto de 2017 15:14
  • 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

    terça-feira, 1 de agosto de 2017 15:22
  • 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

    terça-feira, 1 de agosto de 2017 15:48
  • 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]

    terça-feira, 1 de agosto de 2017 15:59
  • 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

    terça-feira, 1 de agosto de 2017 16:15