Pesquisa complexa em vários campos da tabela

20/01/2013

1

Olá pessoal, tudo bem?

Tenho uma database firebird 2.5 q armazena os números da megasena (todos os sorteios até hj) com os seguintes campos:

Cod_Sorteio(pk), Data_Sorteio(Date), Primeira_Dezena(int), Segunda_Dezena(int), Terceira_Dezena(int), Quarta_Dezena(int), Quinta_Dezena(int), Sexta_Dezena(int), Ganhadores_Sena(int), Premio_Sena(NUMERIC), Ganhadores_Quina(int), Premio Quina(NUMERIC) etc. São muitos campos.

Preciso fazer diversas operações com essa base, por exemplo; eu informo a sequencia das 6 dezenas sorteadas e o programa vai me retornar os dados do sorteio, caso exista um sorteio com essa sequência.

O problema é que as dezenas que informo na pesquisa podem estar armazenadas em qualquer um dos campos, não respeitando uma ordem. Ex.: a dezena 13 pode estar armazenada no campo "Primeira_Dezena", ou no campo "Segunda_Dezena" e assim sucessivamente até no campo "Sexta_Dezena".

Preciso construir uma pesquisa q me retorne os dados de um jogo informado, independente de onde a dezena esteja armazenada.

Estou usando entity framework da plataforma .net.

Tem como construir essa pesquisa?

Se não for possível fazer pelo EF, como ficaria por sql mesmo?

[]'s
Responder

Posts

Boa noite...

uma forma de fazer seria algo desse tipo:



select r.cod_sorteio, qtd
  from ((select t.cod_sorteio,
                (select sum(coalesce(num,0)) from 
                 (select 1 as num where :primeiro in (select t.primeira_dezena
                                                union all
                                               select t.segunda_dezena
                                                union all
                                               select t.terceira_dezena
                                                union all
                                               select t.quarta_dezena
                                                union all
                                               select t.quinta_dezena
                                                union all
                                               select t.sexta_dezena)
                   union all
                  select 1 as num where :segundo in (select t.primeira_dezena
                                                union all
                                               select t.segunda_dezena
                                                union all
                                               select t.terceira_dezena
                                                union all
                                               select t.quarta_dezena
                                                union all
                                               select t.quinta_dezena
                                                union all
                                               select t.sexta_dezena)
                   union all
                  select 1 as num where :terceiro in (select t.primeira_dezena
                                                union all
                                               select t.segunda_dezena
                                                union all
                                               select t.terceira_dezena
                                                union all
                                               select t.quarta_dezena
                                                union all
                                               select t.quinta_dezena
                                                union all
                                               select t.sexta_dezena)
                   union all
                  select 1 as num where :quarto in (select t.primeira_dezena
                                                union all
                                               select t.segunda_dezena
                                                union all
                                               select t.terceira_dezena
                                                union all
                                               select t.quarta_dezena
                                                union all
                                               select t.quinta_dezena
                                                union all
                                               select t.sexta_dezena)
                   union all
                  select 1 as num where :quinto in (select t.primeira_dezena
                                                union all
                                               select t.segunda_dezena
                                                union all
                                               select t.terceira_dezena
                                                union all
                                               select t.quarta_dezena
                                                union all
                                               select t.quinta_dezena
                                                union all
                                               select t.sexta_dezena)
                   union all
                  select 1 as num where :sexto in (select t.primeira_dezena
                                                union all
                                               select t.segunda_dezena
                                                union all
                                               select t.terceira_dezena
                                                union all
                                               select t.quarta_dezena
                                                union all
                                               select t.quinta_dezena
                                                union all
                                               select t.sexta_dezena)) g) as qtd
           from ((select a.cod_sorteio,
                         a.primeira_dezena, a.segunda_dezena, a.terceira_dezena,
                         a.quarta_dezena, a.quinta_dezena, a.sexta_dezena
                    from sorteio a)) t
         )) r
 where coalesce(r.qtd,0) > 0



com este SQL você terá o código do sorteio e o numero de acertos!
Fiz em PostgreSQL, caso de algum problema me avisa que lhe ajudo...
Responder
Deu certo Cristiano?
Responder

04/03/2013

William

Estou encerrando o tópico ...
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira