salve ragazzi
io ho un result di dati di questo tipo:
codice data_arrivo prov codnaz nclienti tipomov
940 2012-07-01 00:00:00.000 060 1 ARRIVI
940 2012-07-01 00:00:00.000 RM 912 3 ARRIVI
940 2012-07-01 00:00:00.000 BN 915 3 ARRIVI
940 2012-07-01 00:00:00.000 CE 915 4 ARRIVI
940 2012-07-01 00:00:00.000 006 1 PARTITI
940 2012-07-01 00:00:00.000 030 2 PARTITI
940 2012-07-01 00:00:00.000 720 2 PARTITI
940 2012-07-01 00:00:00.000 TO 901 4 PARTITI
940 2012-07-01 00:00:00.000 RE 908 2 PARTITI
940 2012-07-01 00:00:00.000 AR 909 2 PARTITI
940 2012-07-01 00:00:00.000 PG 910 2 PARTITI
940 2012-07-01 00:00:00.000 FR 912 6 PARTITI
940 2012-07-01 00:00:00.000 LT 912 2 PARTITI
940 2012-07-01 00:00:00.000 RM 912 80 PARTITI
940 2012-07-01 00:00:00.000 IS 914 2 PARTITI
940 2012-07-01 00:00:00.000 CE 915 16 PARTITI
940 2012-07-01 00:00:00.000 NA 915 48 PARTITI
940 2012-07-01 00:00:00.000 FG 916 2 PARTITI
940 2012-07-01 00:00:00.000 KR 918 3 PARTITI
940 2012-07-01 00:00:00.000 BZ 921 2 PARTITI
come potete vedere alcune province tipo ROMA (RM) e CASERTA (CE) hanno sia movimenti in arrivo che in partenza, in questo caso io dovrei unire su un'unica rica questi movimenti per far uscire una riga del genere:
940 2012-07-01 00:00:00.000 RM 912 3 ARRIVI 80 PARTITI
vi posto la stored che mi da i risultati iniziali e poi le tabelle con una serie di dati di esempio:
select
albergo.codice,
alloggiati.data_arrivo,
isnull(provincia.sigla,'')as prov,
isnull(nazione.codice_istat,'0') as codnaz,
count(alloggiati.data_arrivo) as nclienti,
'ARRIVI' As tipomov
from tab_alberghi as albergo
full Join
tab_alloggiati as alloggiati
On albergo.codice=alloggiati.codice_albergo
full join
tab_province as provincia
On alloggiati.provincia_residenza_codice=provincia.codice
full join
tab_regioni_nazioni as nazione
On alloggiati.stato_residenza_codice=nazione.codice
where albergo.codice=@codalbergo and alloggiati.data_arrivo=@data
group by
albergo.codice,
alloggiati.data_arrivo,
provincia.sigla,
nazione.codice_istat
union all
select
albergo.codice,
alloggiati.data_partenza,
isnull(provincia.sigla,'')as prov,
isnull(nazione.codice_istat,'0') as codnaz,
count(alloggiati.data_partenza) as nclienti,
'PARTITI' As tipomov
from tab_alberghi as albergo
full Join
tab_alloggiati as alloggiati
On albergo.codice=alloggiati.codice_albergo
full join
tab_province as provincia
On alloggiati.provincia_residenza_codice=provincia.codice
full join
tab_regioni_nazioni as nazione
On alloggiati.stato_residenza_codice=nazione.codice
where albergo.codice=@codalbergo and alloggiati.data_partenza=@data
group by
albergo.codice,
alloggiati.data_partenza,
provincia.sigla,
nazione.codice_istat
Tabella province:
Tabella nazioni-regioni
Tabella alloggiati
tabella albergo
Spero di essere stato utile con i dati ovviamente i dati nelle tabelle sono diverse dal risultato della mia stored ma la logica è la stessa.
ah dimenticavo è possibile anche il caso in cui su una stessa riga vi sia il valore zero come arrivi ma ci sia un valore alle partenze...in pratica secondo me bisogna leggere il result che ricevo dalla stored, creare una tabella temporanea, ciclare i risultati e andare a scrivere o aggiornare a seconda dei cai i record nella tabella temporanea e poi alla fine eseguire una select su la tabella temp.
Ma non ricordo il codice l'ho fatta una volta anni fa.. e poi non sono sicuro che possa essere la strada giusta, pensavo anche alle tabelle CTE ma nn sono cm gestire la cosa
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com