Sto cercando di ottenere la somma totale per mesi di net_insurance durante la vita di una politica.Come posso creare una query complessa che somma le condizioni con 2 tabelle?
Ecco il mio politiche tavolo:
ID date_ini date_expired num_policy
1, '2013-01-01', '2014-03-08', 1234
2, '2012-02-11', '2013-02-01', 5678
3, '2013-03-01', '2013-08-03', 9123
4, '2013-04-01', '2013-08-01', 4567
5, '2013-05-01', '2013-09-01', 8912
Ecco la mia tabella di assicurazioni
ID initial_date final_date policy_id net_insurance
1, '2013-01-16', '2014-01-01', 1, 1000
2, '2013-01-14', '2014-03-06', 1, 1400
3, '2012-03-17', '2013-04-24', 2, 2000
4, '2012-02-12', '2013-02-01', 2, 2500
5, '2013-03-09', '2013-08-20', 3, 3000
6, '2013-03-11', '2013-08-02', 3, 4000
Sarà somma in base a questa condizione (durante la vita di una politica).
WHERE insurances.initial_date >= policies.date_ini
AND insurances.final_date <= policies.date_expired
Secondo con la condizione che dovrebbe avere questo:
ID NUM_POLICY SUM_INSURANCE
1 1234 2400
2 5678 2500
3 9123 4000
4 4567 0
5 8912 0
questo farà:
|jan| |feb| |mar| |apr| |may| |jun| |jul| |ago| |sep| |oct| |nov| |dec|
2400 2400 2400 2400 2400 2400 2400 2400 2400 2400 2400 2400
2500 2500 _______________________________________________________________
______________4000 4000 4000 4000 4000 4000 ________________________
_______________________0 0 0 0 0 ________________________
____________________________0 0 0 0 0______________________
Ecco il risultato finale facendo la somma totale di ogni mese:
|jan| |feb| |mar| |apr| |may |jun| |jul| |ago| |sep| |oct| |nov| |dec|
4900 4900 6400 6400 6400 6400 6400 6400 2400 2400 2400 2400
Ma è non funziona la mia domanda che sto avendo un altro valori:
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
8900 8900 8900 8900 8900 8900 8900 8900 8900 8900 8900 8900
Ecco quello che ho provato http://sqlfiddle.com/#!2/e75ea/1
Si prega di qualcuno mi può aiutare con questo?
Apprezzerò molto l'aiuto.
Si vuole ottenere il totale di 'net_insurance' di tutto' insurance' record che erano totalmente in effetti durante la vita di una politica? Sembra ragionevole. Hai un tavolo 'Date'? Il tuo pivoting manuale mi fa incrociare gli occhi. –
I primi due collegamenti funzionano bene, grazie. Avete una tabella che memorizza i campi relativi alla data? Ecco alcuni articoli: http://www.techrepublic.com/blog/the-enterprise-cloud/simplify-sql-server-2005-queries-with-a-dates-table/326/ http: // sqlserverplanet. com/dba/create-date-table Tale tabella dovrebbe salvarti dalla logica di data ingombrante che hai abbozzato. –
C'è un solo record nei dati campione in cui un evento assicurativo si verifica interamente all'interno di una polizza (l'evento assicurativo n. 1 è compreso nel periodo di politica n. 1). Questo record è escluso dal filtro (in Fiddle) che la politica deve iniziare e terminare nel 2013. Sei sicuro di questi filtri? Forse avrebbe senso filtrare le date di inizio degli eventi piuttosto che le date di inizio e fine? –