none
Stored procedure RRS feed

  • Pergunta

  • Como converter o comando abaixo para Stored Procedure?
    ;with 
    	   IdadeCasos as (
    SELECT B.id, year(C.data_Contato) as AnoCaso, DateDiff(year, B.data_nasc, C.data_Contato) as Idade
      from OJ_Prod_AARH as C inner join
           ag_Soc_PF as B on B.id = C.cod_pf
      --where ...
    ),
    AnoaAno as (
    SELECT AnoCaso,
           FxEtaria1= sum(case when Idade <= 9 then 1 else 0 end),
           FxEtaria2= sum(case when Idade between 10 and 19 then 1 else 0 end),
           FxEtaria3= sum(case when Idade between 20 and 59 then 1 else 0 end),
           FxEtaria4= sum(case when Idade >= 60 then 1 else 0 end)
      from IdadeCasos
      group by AnoCaso
    ),
    MediaC as (
    SELECT avg(FxEtaria1) as FxEtaria1, avg(FxEtaria2) as FxEtaria2, 
           avg(FxEtaria3) as FxEtaria3, avg(FxEtaria4) as FxEtaria4
      from AnoaAno
    ),
    Media as (
    SELECT FxE, Casos
      from MediaC
      unpivot (Casos for FxE in ([FxEtaria1], [FxEtaria2], [FxEtaria3], [FxEtaria4])) as U
    ),
    PopFxE as (
    select
        case 
            when FXETARIA <= 0909 then 'FxEtaria1'
            when FXETARIA <= 1919 then 'FxEtaria2'
            when FXETARIA <= 5959 then 'FxEtaria3'
            else 'FxEtaria4'
        end as FaixaEtaria,
        sum(POPULACAO) as Populacao
    from POPBR10
    Where MUNIC_RES=411850
    group by
        case 
            when FXETARIA <= 0909 then 'FxEtaria1'
            when FXETARIA <= 1919 then 'FxEtaria2'
            when FXETARIA <= 5959 then 'FxEtaria3'
            else 'FxEtaria4'
        end
    )
    SELECT case M.FxE when 'FxEtaria1' then 'Crianças'
                      when 'FxEtaria2' then 'Adolescentes'
                      when 'FxEtaria3' then 'Adultos'
                      when 'FxEtaria4' then 'Terceira idade' end as [GRUPO ETÁRIO], 
           cast((1000. * (M.Casos / P.Populacao)) as decimal(8,2)) as [Taxa (casos por 1.000 hab.)]
           --, M.Casos, P.Populacao
      from Media as M inner join
           PopFxE as P on P.FaixaEtaria = M.FxE 
      order by M.FxE;


    • Editado Wilson Boris sexta-feira, 28 de fevereiro de 2014 14:35 correçao
    sexta-feira, 28 de fevereiro de 2014 14:35

Respostas

  • Wilson,

    Poderia detalhar melhor. Poderia ser apenas a criação deste código dentro de uma procedure. Veja abaixo:

    CREATE PROC Sua_procedure
    AS
    BEGIN 
    
    -- ...
    -- Todo o conteúdo indicado
    
    END
    GO
    
    --OU incluir parâmetros para obter os dados das consultas de acordo com o desejado
    
    CREATE PROC Sua_Procedure
    @MUNIC_RES  int,
    @FxEtaria1  tinyint
    AS
    BEGIN 
    
    -- ...
    -- Todo o conteúdo indicado
    
    END
    GO

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    sexta-feira, 28 de fevereiro de 2014 14:43
    Moderador
  • Wilson,

    Basta executar o comando "EXEC", veja abaixo:

    EXEC spTaxaAtaqueAARHFaixaEtaria
    GO

    Para maiores informações sobre o uso de stored procedures, veja:

    http://technet.microsoft.com/en-us/library/aa174792(v=sql.80).aspx

    http://technet.microsoft.com/pt-br/library/ms187926(v=SQL.105).aspx

    http://technet.microsoft.com/pt-br/library/ms189762.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Wilson Boris segunda-feira, 7 de abril de 2014 11:44
    segunda-feira, 7 de abril de 2014 11:43
    Moderador

Todas as Respostas

  • Wilson,

    Poderia detalhar melhor. Poderia ser apenas a criação deste código dentro de uma procedure. Veja abaixo:

    CREATE PROC Sua_procedure
    AS
    BEGIN 
    
    -- ...
    -- Todo o conteúdo indicado
    
    END
    GO
    
    --OU incluir parâmetros para obter os dados das consultas de acordo com o desejado
    
    CREATE PROC Sua_Procedure
    @MUNIC_RES  int,
    @FxEtaria1  tinyint
    AS
    BEGIN 
    
    -- ...
    -- Todo o conteúdo indicado
    
    END
    GO

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    sexta-feira, 28 de fevereiro de 2014 14:43
    Moderador
  • Durval, obrigado pelo retorno.

    Eu nunca trabalhei com SP, é o mesmo código incluso nesta sintaxe?

    O código Select nos campos "Todo o conteúdo indicado"

    ?

    sexta-feira, 28 de fevereiro de 2014 14:53
  • Durval, obrigado pelo retorno.

    Eu nunca trabalhei com SP, é o mesmo código incluso nesta sintaxe?

    O código Select nos campos "Todo o conteúdo indicado"

    ?

    Wilson,

    Sim, é o mesmo código. Existem algumas exceções, mas o que você está propondo fazer deve funcionar sem problemas.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    sexta-feira, 28 de fevereiro de 2014 14:57
    Moderador
  • Durval, obrigado pelo retorno.

    Eu nunca trabalhei com SP, é o mesmo código incluso nesta sintaxe?

    O código Select nos campos "Todo o conteúdo indicado"

    ?

    Wilson, 

    este seu select é fixo? vai ter alguma parametro dinamico?

    Se a resposta for não, coloque a sua sintaxe exatamente onde o Durval marcou "Todo o conteúdo indicado".
    Se atente também para o nome da procedure.

    []´s

    sexta-feira, 28 de fevereiro de 2014 14:59
  • Desculpe a demora.

    Seria o código abaixo?

    Ao clicar em executar, obtenho o retorno: 

    "Comando(s) concluído(s) com êxito." 

    Como verificar os valores da pesquisa? 

    USE [pesquise]
    GO
    /****** Object:  StoredProcedure [dbo].[spTaxaAtaqueAARHFaixaEtaria]    Script Date: 05-04-2014 09:41:54 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[spTaxaAtaqueAARHFaixaEtaria]
    AS
    BEGIN
    ;with 
    	   IdadeCasos as (
    SELECT B.id, year(C.data_Contato) as AnoCaso, DateDiff(year, B.data_nasc, C.data_Contato) as Idade
      from OJ_Prod_AARH as C inner join
           ag_Soc_PF as B on B.id = C.cod_pf
      --where ...
    ),
    AnoaAno as (
    SELECT AnoCaso,
           FxEtaria1= sum(case when Idade <= 9 then 1 else 0 end),
           FxEtaria2= sum(case when Idade between 10 and 19 then 1 else 0 end),
           FxEtaria3= sum(case when Idade between 20 and 59 then 1 else 0 end),
           FxEtaria4= sum(case when Idade >= 60 then 1 else 0 end)
      from IdadeCasos
      group by AnoCaso
    ),
    MediaC as (
    SELECT avg(FxEtaria1) as FxEtaria1, avg(FxEtaria2) as FxEtaria2, 
           avg(FxEtaria3) as FxEtaria3, avg(FxEtaria4) as FxEtaria4
      from AnoaAno
    ),
    Media as (
    SELECT FxE, Casos
      from MediaC
      unpivot (Casos for FxE in ([FxEtaria1], [FxEtaria2], [FxEtaria3], [FxEtaria4])) as U
    ),
    PopFxE as (
    select
        case 
            when FXETARIA <= 0909 then 'FxEtaria1'
            when FXETARIA <= 1919 then 'FxEtaria2'
            when FXETARIA <= 5959 then 'FxEtaria3'
            else 'FxEtaria4'
        end as FaixaEtaria,
        sum(POPULACAO) as Populacao
    from POPBR10
    Where MUNIC_RES=411850
    group by
        case 
            when FXETARIA <= 0909 then 'FxEtaria1'
            when FXETARIA <= 1919 then 'FxEtaria2'
            when FXETARIA <= 5959 then 'FxEtaria3'
            else 'FxEtaria4'
        end
    )
    SELECT case M.FxE when 'FxEtaria1' then 'Crianças'
                      when 'FxEtaria2' then 'Adolescentes'
                      when 'FxEtaria3' then 'Adultos'
                      when 'FxEtaria4' then 'Terceira idade' end as [GRUPO ETÁRIO], 
           cast((1000. * (M.Casos / P.Populacao)) as decimal(8,2)) as [Taxa (casos por 1.000 hab.)]
           --, M.Casos, P.Populacao
      from Media as M inner join
           PopFxE as P on P.FaixaEtaria = M.FxE 
      order by M.FxE;	
    
    END



    • Editado Wilson Boris sábado, 5 de abril de 2014 12:45 complemento
    sábado, 5 de abril de 2014 12:43
  • Wilson,

    Basta executar o comando "EXEC", veja abaixo:

    EXEC spTaxaAtaqueAARHFaixaEtaria
    GO

    Para maiores informações sobre o uso de stored procedures, veja:

    http://technet.microsoft.com/en-us/library/aa174792(v=sql.80).aspx

    http://technet.microsoft.com/pt-br/library/ms187926(v=SQL.105).aspx

    http://technet.microsoft.com/pt-br/library/ms189762.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Wilson Boris segunda-feira, 7 de abril de 2014 11:44
    segunda-feira, 7 de abril de 2014 11:43
    Moderador