Strutturare uan select sql complessa

giovedì 23 agosto 2012 - 18.14
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Visual Studio 2010  |  SQL Server 2008 R2

trinity Profilo | Guru

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:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Tabella nazioni-regioni

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Tabella alloggiati

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

tabella albergo

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

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
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5