Como montar essa SQL
Boa tarde,
Estou com duvida de como montar essa SQL ou procedure. Me passaram o seguinte enunciado:
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)
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
Curtidas 0
Respostas
Facc
26/08/2009
ainda buscando uma solução
O que eu fiz até agora foi mais ou menos isso:
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?
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?
GOSTEI 0
Emerson Nascimento
26/08/2009
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]
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
[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...
depois avalia se deve realmente suspender o vendedor (somente se estiver ativo há 3 meses ou mais)...
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.
[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.
GOSTEI 0
Facc
26/08/2009
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.
GOSTEI 0
Facc
26/08/2009
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.
GOSTEI 0
Emerson Nascimento
26/08/2009
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.
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...
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]]
GOSTEI 0
Facc
26/08/2009
Valeu pela dica...
mas ele não reconhece o [b:3af8fb2c9c]when >= 8 then[/b:3af8fb2c9c]
mas ele não reconhece o [b:3af8fb2c9c]when >= 8 then[/b:3af8fb2c9c]
GOSTEI 0