Il titolo non sarà chiarissimo ma non saprei come spiegarlo meglio. Questo esempio è la versione strasemplificata del mio problema:
La tabella:
codice:
tabella1(valore, orario)
Se devo estratte i dati divisi per fascia oraria, avendo il campo fascia_oraria basterebbe un "group by fascia_oraria"
Ma la fascia dipende dai dati per i quali sto eseguendo la query, quindi ho risolto cosi:
codice:
select sum(valore),
case(1)
WHEN (orario>='09.00.00' and orario<'10.00.00') THEN 'fascia1'
WHEN (orario>='10.00.00' and orario<'11.00.00') THEN 'fascia2'
ELSE NULL END
as fascia_oraria
from tabella1
where (orario>='09.00.00' and orario<'10.00.00') or (orario>='10.00.00' and orario<'11.00.00')
group by fascia_oraria
Dove fascia1 e fascia2 sono definiti in fase di esecuzione query. Il tutto funziona perfettamente MA non funziona se le fasce si sovrappongono! perchè ovviamente non può entrare in 2 rami del case e la select "lavora" solo una volta su ciascun valore. Questo mi crea problemi su tantissimi altri casi. Ho risolto eseguendo una query per ogni fascia oraria e unendo il tutto con una union. E tutto va bene finche la query non si complica ulteriormente e mi serve ancora creare altre unione perchè devo prendere alcuni dati su più casi che si sovrappongono e dovrei annidare troppo con le union (in alcuni casi non posso nemmeno ma lasciamo perdere).
Aldilà di questi dettagli su i miei problemi successivi, esiste un modo più furbo per fare questa "semplice" query?
Grazie infinite a chi ha semplicemente avuto voglia di leggere tutto