Fórum Pesquisa complexa em vários campos da tabela #432971
20/01/2013
0
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
Cristiano Franco
Curtir tópico
+ 0Posts
20/02/2013
Alessandro Folk
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...
Gostei + 0
27/02/2013
Alessandro Folk
Gostei + 0
04/03/2013
William
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)