Fórum Como montar essa SQL #31360

26/08/2009

0

Boa tarde,

Estou com duvida de como montar essa SQL ou procedure. Me passaram o seguinte enunciado:

1 - Ter atingido pelo menos 8 vezes a meta de vendas nos últimos 12 meses. Entra em Ativo (Gravo a data de ativação) 2 - Ter atingido 2 metas totais de vendas nos últimos 3 meses após a ativação. Após de ativo esse enunciado entra em ação, contado qntos meses ele atingiu, se atingiu de 2 a 3, continua ativo, caso contrario entra para suspenso (tbm gravo a data que foi suspenso, para no próximo mês ele ter a chance novamente)


O vendedor cadastra o mês/ano da venda e se atingiu ou não a meta estipulada (campo Char(1) ´S´ ou ´N´)

Preciso trazer para a tela se ele continua ativo ou suspenso de acordo com esse enunciado.

Espero ter sido claro.

Não sei se ajuda, mas estou usando o MySQL Server 5.1 com VB2008 (Conector MySQL.NET 6.0.4)


Facc

Facc

Responder

Posts

27/08/2009

Facc

ainda buscando uma solução

O que eu fiz até agora foi mais ou menos isso:

update funcionario set dtativacao = <Data Atual>
where (SELECT count(*) from metas
        where atingiu = ´S´
          and idfuncionario = <cod. vendedor>
          and mesano between <dtativacao - 3 meses> and <dtativacao>) >= 2
  and idfuncionario = <cod. vendedor>


Mas como alterar o campo dtsuspensao, imaginando que esse vendedor não atingiu a 2 das 3 metas nos 3 meses anteriores?

Gostaria de algo ´automatico´, tipo uma triger após inclusão da última meta.

Alguém pode me auxiliar?


Responder

Gostei + 0

27/08/2009

Emerson Nascimento

veja se isso funciona:

[b:c9eb524260]1 - Ter atingido pelo menos 8 vezes a meta de vendas nos últimos 12 meses. Entra em Ativo (Gravo a data de ativação)[/b:c9eb524260]
update funcionario set dtativacao = [Data Atual]
where idfuncionario = [cod. vendedor]
 and (SELECT count(*) from metas
      where atingiu = ´S´ and metas.idfuncionario = funcionario.idfuncionario
      and mesano >= [[Data Atual] - [12 meses]]) >= 8


pelo que eu entendi, em algum momento esta data deve ser zerada, então deve haver uma nova avaliação...
abaixo avalia se no último ano o vendedor atingiu a meta menos 3 vezes e então ´desativa´ o vendedor
update funcionario set dtativacao = null
where idfuncionario = [cod. vendedor]
 and (SELECT count(*) from metas
      where atingiu = ´S´ and metas.idfuncionario = funcionario.idfuncionario
      and mesano >= [[Data Atual] - [12 meses]]) < 3


[b:c9eb524260]2 - Ter atingido 2 metas totais de vendas nos últimos 3 meses após a ativação. Após ativo esse enunciado entra em ação, contado qntos meses ele atingiu, se atingiu de 2 a 3, continua ativo, caso contrario entra para suspenso (tbm gravo a data que foi suspenso, para no próximo mês ele ter a chance novamente)[/b:c9eb524260]
em algum momento esta data também deve ser zerada, então deve-se avaliar se está ativo há pelo menos 3 meses e se, dentro desses 3 meses, atingiu as metas estipuladas...
update funcionario set dtsuspensao = null
where idfuncionario = [cod. vendedor]
 and (dtativacao > [[Data Atual] - [3 meses]]
 or (SELECT count(*) from metas
      where atingiu = ´S´ and metas.idfuncionario = funcionario.idfuncionario
      and mesano >= [[Data Atual] - [3 meses]]) > 1 -- 2 ou 3


depois avalia se deve realmente suspender o vendedor (somente se estiver ativo há 3 meses ou mais)...
update funcionario set dtsuspensao = <Data Atual>
where idfuncionario = [cod. vendedor]
 and dtativacao <= [[Data Atual] - [3 meses]]
 and (SELECT count(*) from metas
      where atingiu = ´S´ and metas.idfuncionario = funcionario.idfuncionario
      and mesano >= [[Data Atual] - [3 meses]]) < 2 -- 0 ou 1


tomei como base a sua instrução. mas vi uma ´falha´: se um vendedor foi admitido há menos de 1 ano, ainda assim a 1a. condição será avaliada daquela forma?

outra coisa: não trabalho com MySQL, mas talvez seja possível reduzir de 4 para 2 instruções, caso você possa trabalhar com CASE.


Responder

Gostei + 0

27/08/2009

Facc

tomei como base a sua instrução. mas vi uma ´falha´: se um vendedor foi admitido há menos de 1 ano, ainda assim a 1a. condição será avaliada daquela forma? outra coisa: não trabalho com MySQL, mas talvez seja possível reduzir de 4 para 2 instruções, caso você possa trabalhar com CASE.


Então, se o vendedor tem menos de um ano de casa (Data que me passaram para comparar é 01/08/2008) ele não possui os requisitos para ter acesso a esse sistema.

Até pensei nessa possibilidade (Update com CASE) mas não encontrei nada na Net se é ou não possivel trabalhar dessa forma.


Responder

Gostei + 0

27/08/2009

Facc

tomei como base a sua instrução. mas vi uma ´falha´: se um vendedor foi admitido há menos de 1 ano, ainda assim a 1a. condição será avaliada daquela forma? outra coisa: não trabalho com MySQL, mas talvez seja possível reduzir de 4 para 2 instruções, caso você possa trabalhar com CASE.


Então, se o vendedor tem menos de um ano de casa (Data que me passaram para comparar é 01/08/2008) ele não possui os requisitos para ter acesso a esse sistema.

Até pensei nessa possibilidade (Update com CASE) mas não encontrei nada na Net se é ou não possivel trabalhar dessa forma.


Responder

Gostei + 0

27/08/2009

Emerson Nascimento

com CASE, deve ser algo assim:

1 - Ter atingido pelo menos 8 vezes a meta de vendas nos últimos 12 meses. Entra em Ativo (Gravo a data de ativação)
e se atingiu a meta menos que 3 vezes naquele período, então ´desativa´ o vendedor. se nenhuma condição anterior foi atendida, mantém a data de ativação previamente gravada.
update funcionario set dtativacao =
  (case (SELECT count(*) from metas
         where atingiu = ´S´ and idfuncionario = funcionario.idfuncionario
         and mesano >= [[Data Atual] - [12 meses]])
     when >= 8 then [Data Atual]
     when < 3 null
     else dtativacao
  end)
where idfuncionario = [cod. vendedor]



2 - Ter atingido 2 metas totais de vendas nos últimos 3 meses após a ativação. Após ativo esse enunciado entra em ação, contado qntos meses ele atingiu, se atingiu de 2 a 3, continua ativo, caso contrario entra para suspenso (tbm gravo a data que foi suspenso, para no próximo mês ele ter a chance novamente)
em algum momento esta data também deve ser zerada, então deve-se avaliar se está ativo há pelo menos 3 meses e se, dentro desses 3 meses, atingiu as metas estipuladas...
update funcionario set dtsuspensao =
  (case (SELECT count(*) from metas
         where atingiu = ´S´ and idfuncionario = funcionario.idfuncionario
         and mesano >= [[Data Atual] - [3 meses]])
     when > 1 then null
     else [Data Atual]
   end)
where idfuncionario = [cod. vendedor]
  and dtativacao <= [[Data Atual] - [3 meses]]



Responder

Gostei + 0

27/08/2009

Facc

Valeu pela dica...

mas ele não reconhece o [b:3af8fb2c9c]when >= 8 then[/b:3af8fb2c9c]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar