logo DevMedia  
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos

Edição do Mês
  Fórum DevMedia
Fórum de Discussão
Conheça também o NOVO fórum da DevMedia, no endereço: www.devmedia.com.br/forum
O novo fórum possui diversas vantagens! Saiba mais em
www.devmedia.com.br/articles/viewcomp.asp?comp=14726
Estamos sempre trabalhando na melhora do site como um todo! Bons códigos!
Equipe DevMedia

 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos  RegistrarRegistrar   
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 
Edição do Mês

Como montar essa SQL
 
Novo Tópico   Responder Mensagem    Fórum DevMedia - Índice do Fórum -> MySQL
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Facc
Membro Senior


Registrado em: Sábado, 29 de Março de 2003
Mensagens: 1141
Localiza?: Cerquilho / SP

MensagemEnviada: Qua Ago 26, 2009 4:03 pm    Assunto: Como montar essa SQL Responder com Citação

Boa tarde,

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

Cita?:
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)
_________________
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger
Facc
Membro Senior


Registrado em: Sábado, 29 de Março de 2003
Mensagens: 1141
Localiza?: Cerquilho / SP

MensagemEnviada: Qui Ago 27, 2009 8:28 am    Assunto: Responder com Citação

ainda buscando uma solução

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

C?o:
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?
_________________
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger
emerson.en
Membro Senior


Registrado em: Terça-Feira, 16 de Março de 2004
Mensagens: 2503
Localiza?: São Paulo - SP - Brasil

MensagemEnviada: Qui Ago 27, 2009 10:27 am    Assunto: Responder com Citação

veja se isso funciona:

1 - Ter atingido pelo menos 8 vezes a meta de vendas nos últimos 12 meses. Entra em Ativo (Gravo a data de ativação)
C?o:
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
C?o:
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


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...
C?o:
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)...
C?o:
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.
_________________
Ao postar dúvidas informe sempre o SGBD e versão, linguagem utilizada, componentes de conexão/acesso e demais informações pertinentes ao problema...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email MSN Messenger
Facc
Membro Senior


Registrado em: Sábado, 29 de Março de 2003
Mensagens: 1141
Localiza?: Cerquilho / SP

MensagemEnviada: Qui Ago 27, 2009 10:35 am    Assunto: Responder com Citação

emerson.en escreveu:

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.
_________________
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger
Facc
Membro Senior


Registrado em: Sábado, 29 de Março de 2003
Mensagens: 1141
Localiza?: Cerquilho / SP

MensagemEnviada: Qui Ago 27, 2009 10:37 am    Assunto: Responder com Citação

emerson.en escreveu:

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.
_________________
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger
emerson.en
Membro Senior


Registrado em: Terça-Feira, 16 de Março de 2004
Mensagens: 2503
Localiza?: São Paulo - SP - Brasil

MensagemEnviada: Qui Ago 27, 2009 11:35 am    Assunto: Responder com Citação

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.
C?o:
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...
C?o:
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]]

_________________
Ao postar dúvidas informe sempre o SGBD e versão, linguagem utilizada, componentes de conexão/acesso e demais informações pertinentes ao problema...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email MSN Messenger
Facc
Membro Senior


Registrado em: Sábado, 29 de Março de 2003
Mensagens: 1141
Localiza?: Cerquilho / SP

MensagemEnviada: Qui Ago 27, 2009 2:19 pm    Assunto: Responder com Citação

Valeu pela dica...

mas ele não reconhece o when >= 8 then
_________________
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário Yahoo Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    Fórum DevMedia - Índice do Fórum -> MySQL Todos os horários são GMT - 3 Hours
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibído.
Responder Tópicos Proibído
Editar Mensagens: Proibído.
Excluir Mensagens: Proibído.
Votar em Enquetes: Proibído.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB