Supponendo di avere la nostra tabella [enalotto] con 100.000 righe (i numeri di ciascuna riga non sono ordinati, se voglio ordinarli userò la select mostrata nel post precedente) vediamo di trovare i numeri che ho azzeccatto sull'ultima estrazione.
Per farlo possiamo ragionare in questo modo: controllo, per ciascuna colonna, se il suo valore risulta essere nella lista delle palline vincenti. Se trovo il valore sommo 1 in modo tale da avere, per ciascuna riga, il numero di "cifre" azzeccate.
/* Estrazione del 14.10: 11 14 43 46 61 70 */
declare @numEstratto1 tinyint
declare @numEstratto2 tinyint
declare @numEstratto3 tinyint
declare @numEstratto4 tinyint
declare @numEstratto5 tinyint
declare @numEstratto6 tinyint
set @numEstratto1 = 11
set @numEstratto2 = 14
set @numEstratto3 = 43
set @numEstratto4 = 46
set @numEstratto5 = 61
set @numEstratto6 = 70
--> vedo solo le giocate in cui ho azzeccato più di due cifre:
select * from
(
select idRecord, num1, num2, num3, num4, num5, num6,
case when num1 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num2 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num3 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num4 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num5 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num6 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end
as numeriAzzeccati
from enalotto
) T
where numeriAzzeccati > 2
order by numeriAzzeccati desc
--> in totale, quante combinazioni ho fatto?
select count(numeriAzzeccati) as numGiocate, numeriAzzeccati from
(
select idRecord, num1, num2, num3, num4, num5, num6,
case when num1 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num2 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num3 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num4 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num5 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end +
case when num6 in (@numEstratto1, @numEstratto2, @numEstratto3, @numEstratto4, @numEstratto5, @numEstratto6) then 1 else 0 end
as numeriAzzeccati
from enalotto
) T
group by numeriAzzeccati
order by numeriAzzeccati
Insomma: avrei speso un sacco di soldi e ne avrei vinti veramente pochi... :-)