Fórum SQL retornar intervalo de valores #594534

29/05/2018

0

Boa tarde , estou com um problema e não estou conseguindo solucionar , tenho uma tabela pontuacao (cod_pontuacao , score_inicial , score_final , dias_inicial , dias_final , descricao) , essa tabela tem valores fixos. Exemplo
cod_prod = 1
descricao = medio
score_inicial = 24
score_final = 31
dias_inicial = 731
dias_final = 1095 . Nessa tabela eu quero pegar a descricao para gravar em uma outra tabela score , na minha outra tabela tem apenas o campo dias , score , quero pegar a descricao desse valor . Exemplo: Paulo , 733 , 27 , a descricao seria = medio . Alguem pode me ajudar ????
Lucas Domiciano

Lucas Domiciano

Responder

Post mais votado

30/05/2018

Não. Não entendi.
"Na minha outra tabela tem apenas o campo dias , score"... como será possível gravar a descrição???

Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 1

Mais Posts

29/05/2018

Emerson Nascimento

deve ser algo assim:
select 
  s.nome, s.score, s.dias,
  coalesce(p.descricao, 'indefinido') descricao
from score s
left join pontuacao p on s.score between p.score_inicial and p.score_final
  and s.dias between p.dias_inicial and p.diasfinal
Responder

Gostei + 0

29/05/2018

Lucas Domiciano

Obrigado pela ajuda , mas não é exatamente isso que eu quero , eu quero pegar o valor do campo descricao da tabela pontuacao , e colocar na do score . Entendeu ?
Responder

Gostei + 0

30/05/2018

Lucas Domiciano

tb_Score
cod_score
data
descricao
score
dias
cod_aluno


tb_pontuacao
cod_pontuacao
descricao
score_final
score_inicial
dias_inicial
dias_final

Onde a tabela pontuacao possui valores definidos ex: Para uma crianca de 730 dias , de 8 a 19 pontos ela é nível médio , dias_inicial = 365 , dias_final = 730 , score_inicial = 8 , score_final = 19 , descricao = nível médio . Eu quero comparar se caso uma criança acerte 14 pontos , que será salvo na tabela score esses 15 e ela tem 369 dias , eu quero comparar esses 369 dias da tabela score , com o intervalo de valores do campo dias_inicial e dias_final da tabela pontuacao , para conseguir o valor descricao que no caso é = nível médio , para salvar na tabela Score , e fazer a mesma coisa com o campo score. Eu não sei se tem como fazer diferente , sem usar tabela pontuacao.
Responder

Gostei + 0

30/05/2018

Lucas Domiciano

Corrigindo * Onde a tabela pontuacao possui valores definidos ex: Para uma crianca de 730 dias , de 8 a 19 pontos ela é nível médio , dias_inicial = 365 , dias_final = 730 , score_inicial = 8 , score_final = 19 , descricao = nível médio . Eu quero comparar se caso uma criança acerte 14 pontos , que será salvo na tabela score esses 1 e ela tem 369 dias , eu quero comparar esses 369 dias da tabela score , com o intervalo de valores do campo dias_inicial e dias_final da tabela pontuacao , para conseguir o valor descricao que no caso é = nível médio , para salvar na tabela Score , e fazer a mesma coisa com o campo score. Eu não sei se tem como fazer diferente , sem usar tabela pontuacao.
Responder

Gostei + 0

30/05/2018

Lucas Domiciano

Corrigindo * Onde a tabela pontuacao possui valores definidos ex: Para uma crianca de 730 dias , de 8 a 19 pontos ela é nível médio , dias_inicial = 365 , dias_final = 730 , score_inicial = 8 , score_final = 19 , descricao = nível médio . Eu quero comparar se caso uma criança acerte 14 pontos , que será salvo na tabela score esses 14 e ela tem 369 dias , eu quero comparar esses 369 dias da tabela score , com o intervalo de valores do campo dias_inicial e dias_final da tabela pontuacao , para conseguir o valor descricao que no caso é = nível médio , para salvar na tabela Score , e fazer a mesma coisa com o campo score. Eu não sei se tem como fazer diferente , sem usar tabela pontuacao.
Responder

Gostei + 0

30/05/2018

Emerson Nascimento

acredito que pra fazer isso diretamente no banco, somente com stored procedure.

create or alter procedure atu_descri
as
declare variable vcod_pontuacao int;
declare variable vdescricao varchar(50);
declare variable vscore_final int;
declare variable vscore_inicial int;
declare variable vdias_inicial int;
declare variable vdias_final int;
begin
  for select
        cod_pontuacao, descricao, score_final,
        score_inicial, dias_inicial, dias_final
      from tb_pontuacao
      into :vcod_pontuacao, :vdescricao, :vscore_final,
           :vscore_inicial, :vdias_inicial, :vdias_final
  do
    update tb_score set descricao = :vdescricao
    where score between :vscore_inicial and :vscore_final
      and dias between :vdias_inicial and :vdias_final;

end
Responder

Gostei + 0

30/05/2018

Raimundo Pereira

Tenta preencher pelo menos uma linha nas duas tabelas mais ou menos de como você quer que retorne.
Post o print de ambas tabelas.

Nome de cada tabela com os campos ajudam na resolução também.
Tentei interpretar mais não rolou.
Talvez com a imagem dê uma clareada e alguém possa te ajudar.
Responder

Gostei + 0

30/05/2018

Lucas Domiciano

Acha que seria melhor fazer na linguagem delphi mesmo , esse tratamento , sem usar uma tabela fixa ?
Responder

Gostei + 0

30/05/2018

Lucas Domiciano

Score (
  cod_score,
 data,
 score,
 descricao,
cod_aluno,
dias
)


  Pontuacao(
     cod_pontuacao,
    descricao,
    score_inicial,
    score_final,
   dias_inicial ,
  dias_final
)



Esses são os campos das tabelas Score e Pontuacao . Tabela Pontuacao é onde eu deixe pré determinado quem é nivel medio , elevada , rebaixada . exemplo
Pontuacao : 1 , MUITO REBAIXADA , 0 , 5 , 365 , 730
Pontuacao : 2 , REBAIXADA , 6 , 18 , 365 , 730
Pontuacao : 2 , MEDIO , 19 , 25 , 365 , 730

Score : 1, 30/05/2018 , 3 , MUITO REBAIXADA , 2 , 650. Esse MUITO REBAIXADA eu tenho que verificar a tabela pontuacao e colocar na tabela Score

Responder

Gostei + 0

30/05/2018

Lucas Domiciano

Corrigindo *Esses são os campos das tabelas Score e Pontuacao . Tabela Pontuacao é onde eu deixe pré determinado quem é nivel medio , elevada , rebaixada . exemplo
Pontuacao : 1 , MUITO REBAIXADA , 0 , 5 , 365 , 730
Pontuacao : 2 , REBAIXADA , 6 , 18 , 365 , 730
Pontuacao : 3 , MEDIO , 19 , 25 , 365 , 730

Score : 1, 30/05/2018 , 3 , MUITO REBAIXADA , 2 , 650. Esse MUITO REBAIXADA eu tenho que verificar a tabela Pontuacao e colocar na tabela Score
Responder

Gostei + 0

30/05/2018

Lucas Domiciano

Vocês acham que devo fazer esse controle por classes , ao invès do banco ?
Responder

Gostei + 0

30/05/2018

Lucas Domiciano

CONSEGUI RESOLVER !!! OBRIGADO !!!
Responder

Gostei + 0

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

Aceitar