none
Média de atendimentos de pedidos RRS feed

  • Pergunta

  • Estou precisando montar um view que me mostre uma media de atendimentos no período.

    Ex:

    id  | item     | desc               | status      | data

    1   |    001   |  reserva moto| aberta     | 20170501

    1   |    002   | combustivel    | finalizada| 20170501

    2   |    001   | combustivel 2  | finalizada| 20170504

    2   |    002   | combustivel4    | aberta    | 20170504

    1   |    002   | combustivel    | aberta      | 20170504

    -----

    No mes de maio foram abertas 5 solicitações de pedidos e fechados 2

    Media => Finalizado / abertos * 100  =>  (2/5)* 100 = 40%

    As informações de abertos e finalizados eu tenho em uma tabela, porém estou perdida sem saber como eu posso fazer esse loop, tipo 1 verifica os abertos e depois verifica fechado e faz calculo.

    Alguém poderia me ajudar a montar essa query?

    segunda-feira, 22 de maio de 2017 18:38

Respostas

  • Boa tarde, Carine!

    Você pode utilizar a função Count juntamente com um o Case para retornar os valores já somados, por exemplo:

    Create Table #Atendimentos
    (
    	Id			TinyInt
    	,Item		Char(3)
    	,[Desc]		VarChar(50)
    	,[Status]	VarChar(20)
    	,[Data]		Int
    )
    
    Insert Into #Atendimentos
    Values 
    	 (1, '001', 'reserva moto', 'aberta'     , 20170501)	
    	,(1, '002', 'combustivel', 'finalizada'  , 20170501)	
    	,(2, '001', 'combustivel 2', 'finalizada', 20170504)	
    	,(2, '002', 'combustivel4', 'aberta'     , 20170504)	
    	,(1, '002', 'combustivel', 'aberta'      , 20170504)
    
    
    Select    Count(Case When [Status] = 'aberta' Then 1 End) Abertas
            ,Count(Case When [Status] = 'finalizada' Then 1 End) Finalizadas
            ,Count(*) Total
    From    #Atendimentos

    Então você poderia utilizar uma consulta semelhante a esta (Utilizei uma cte somente para facilitar o entendimento):

    ;With cte
    As
    (
            Select    Convert(Decimal(10, 2), Count(Case When [Status] = 'aberta' Then 1 End)) Abertas
                    ,Convert(Decimal(10, 2), Count(Case When [Status] = 'finalizada' Then 1 End)) Finalizadas
                    ,Count(*) Total
                    ,Left([Data], 6)    [Data]
            From    #Atendimentos
            Group By Left([Data], 6)
    )
    Select    Finalizadas / Total * 100.    [Media Abertas]
            ,Abertas / Total * 100.        [Media Finalizadas]
            ,[Data]                        [Mes]
    From    cte


    segunda-feira, 22 de maio de 2017 19:50

Todas as Respostas

  • Olá,

    Não sei se entendi bem...

    Mas tente assim

    CREATE TABLE ATEND
    (
    ID INT ,
    ITEM VARCHAR (10),
    DESCR VARCHAR (50),
    STATUS_ VARCHAR (30),
    DATA VARCHAR (8)
    )
    
    INSERT ATEND VALUES
    (1,'001','reserva moto','ABERTA','20170501'),
    (1,'002','combustivel','finalizada','20170501'),
    (2,'001','combustivel 2','finalizada','20170504'),
    (2,'002','combustivel 4','aberta','20170504'),
    (1,'002','combustivel','aberta','20170504')
    
    DECLARE @FINALIZADA as decimal(13, 0)
    DECLARE @TOTAL as decimal(13, 0);
    SELECT @FINALIZADA = COUNT(STATUS_) FROM ATEND WHERE STATUS_ = 'FINALIZADA'
    SELECT @TOTAL = COUNT(STATUS_) FROM ATEND ;
    
    WITH CTE_PRODUTOS AS (
        SELECT         
            COALESCE((@FINALIZADA)*100 / NULLIF(@TOTAL,0),0) AS PORCENTAGEM
        FROM ATEND	   
    )
    
    SELECT     
        PORCENTAGEM
    FROM CTE_PRODUTOS
    GROUP BY PORCENTAGEM 

    segunda-feira, 22 de maio de 2017 19:42
  • Boa tarde, Carine!

    Você pode utilizar a função Count juntamente com um o Case para retornar os valores já somados, por exemplo:

    Create Table #Atendimentos
    (
    	Id			TinyInt
    	,Item		Char(3)
    	,[Desc]		VarChar(50)
    	,[Status]	VarChar(20)
    	,[Data]		Int
    )
    
    Insert Into #Atendimentos
    Values 
    	 (1, '001', 'reserva moto', 'aberta'     , 20170501)	
    	,(1, '002', 'combustivel', 'finalizada'  , 20170501)	
    	,(2, '001', 'combustivel 2', 'finalizada', 20170504)	
    	,(2, '002', 'combustivel4', 'aberta'     , 20170504)	
    	,(1, '002', 'combustivel', 'aberta'      , 20170504)
    
    
    Select    Count(Case When [Status] = 'aberta' Then 1 End) Abertas
            ,Count(Case When [Status] = 'finalizada' Then 1 End) Finalizadas
            ,Count(*) Total
    From    #Atendimentos

    Então você poderia utilizar uma consulta semelhante a esta (Utilizei uma cte somente para facilitar o entendimento):

    ;With cte
    As
    (
            Select    Convert(Decimal(10, 2), Count(Case When [Status] = 'aberta' Then 1 End)) Abertas
                    ,Convert(Decimal(10, 2), Count(Case When [Status] = 'finalizada' Then 1 End)) Finalizadas
                    ,Count(*) Total
                    ,Left([Data], 6)    [Data]
            From    #Atendimentos
            Group By Left([Data], 6)
    )
    Select    Finalizadas / Total * 100.    [Media Abertas]
            ,Abertas / Total * 100.        [Media Finalizadas]
            ,[Data]                        [Mes]
    From    cte


    segunda-feira, 22 de maio de 2017 19:50
  • Deleted
    terça-feira, 23 de maio de 2017 20:37
  • Obrigada!

    funcionou perfeitamente.

    quinta-feira, 25 de maio de 2017 16:47