Query con utilizzo di cursori e tabella temporanea

lunedì 13 febbraio 2012 - 10.16

trinity Profilo | Guru

Buongiorno,

devo porre due domande :)....

Premettendo che ho questa query che funziona (in parte)

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

i risultati di una prova sono visibili nell'immagine che allego:


334x124 18Kb


A tal proposito ecco le mie due domande...

1) Posso eseguire questa query su un database access 2010? perchè a malincuore nel mio progetto sono costretto ad utilizzare access per motivi di clientela che non sto qui a spiegare
2) alla fine della query ho aggiunto un group by perchè se potete vedere i risultati riportati nell'immagine a me servirebbe avere un totale ossia per esempio prendiamo in considerazione torino, dovrebbe uscire un solo record di torino con la somma degli arrivi, partiti e presenze...ovviamente il mio group by non funziona....mi potete dare una mano?
E' possibile che debba eseguire le relative somme nelle if all'interno del ciclo del cursore?

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao
Consiglio:
Perchè non ti crei un bel Dataset all'interno della tua applicazione è gestisci tutto con Linq-To-Dataset?
Avrai la possibilità di avere il pieno controllo della situazione e crearti delle classi che rispecchiano il risultato che vuoi ottenere da dare in pasto al DataSource della DataGridView.

Facci sapere....
Ciao

trinity Profilo | Guru

comunque a monte dovrei eseguire delle query o no?
Con la mia in un'unica soluzione ottenevo il risultato che volevo...cmq hai qualche riferimento a linq to dataset?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

>comunque a monte dovrei eseguire delle query o no?
No ... In realtà Si.... ma è solo la select che popola il Dataset in quanto contenitore di dati disconnesso dal DB.

>Con la mia in un'unica soluzione ottenevo il risultato che volevo...
Il mio voleva solo essere un consiglio secondo le mie preferenze personali.

>cmq hai qualche riferimento a linq to dataset?
Eccolo http://msdn.microsoft.com/it-it/library/bb386977.aspx

Ciao

trinity Profilo | Guru

Si e ti ringrazio del tuo consiglio e lo terrò a mente anzi andrò a vedere il link che mi hai passato per capire come funziona linq to dataset, cmq sono molto abituato a scrivere le query e poi richiamarle dall'applicativo.....quindi in sostanza vorrei capire se si possono unire i record come ho detto nel primo post ed inoltre ultima novità dovrei anche apportare una modifica in quanto dovrei aggiungere una colonna nella tabella temporanea ossia presenze del giorno precedente ed analizzare i giorni precedenti al giorno che voglio visualizzare e vedere se ci sono delle presenze e riportarle nella colonna specifica.

E' difficile :(


per aiutare meglio post le due tabelle con dei dati all'interno:

CREATE TABLE [dbo].[TABMOVIMENTI]( [ID] [int] NOT NULL, [DATA] [datetime] NULL, [NRMOV] [int] NULL, [CODPAESE] [int] NULL, [TIPOMOV] [nvarchar](1) NULL ) ON [PRIMARY] Insert Into TabMovimenti (Id,data,nrmov,codpaese,tipomov) Values (1,10/02/2012,5,1,"A") Insert Into TabMovimenti (Id,data,nrmov,codpaese,tipomov) Values (2,10/02/2012,2,5,"A") Insert Into TabMovimenti (Id,data,nrmov,codpaese,tipomov) Values (3,10/02/2012,1,10,"A") Insert Into TabMovimenti (Id,data,nrmov,codpaese,tipomov) Values (4,10/02/2012,2,1,"P") Insert Into TabMovimenti (Id,data,nrmov,codpaese,tipomov) Values (5,12/02/2012,10,1,"A")

CREATE TABLE [dbo].[TABPAESI]( [ID] [int] NOT NULL, [CODPAESE] [smallint] NULL, [DESCRIZIONE] [nvarchar](255) NULL, [SIGLA] [nvarchar](255) NULL ) ON [PRIMARY] Insert Into tabpaesi (id,codpaese,descrizione,sigla)Values(1,1,"Torino","TO") Insert Into tabpaesi (id,codpaese,descrizione,sigla)Values(1,5,"Asti","AT") Insert Into tabpaesi (id,codpaese,descrizione,sigla)Values(1,10,"Genova","GE")

Adesso il risultato deve essere il seguente:

se scelgo di visualizzare il giorno 10 febbraio ecco il risultato che deve uscire:

codpaese - descrizione - presenze_precedenti - arrivi - partiti - presenze_attuali
1 Torino 0 5 2 3
5 Asti 0 2 0 2
10 Genova 0 1 0 1

se dovessi scegliere il giorno 12 Febbraio ecco il quadro come deve essere:

codpaese - descrizione - presenze_precedenti - arrivi - partiti - presenze_attuali
1 Torino 3 10 0 13
5 Asti 2 0 0 2
10 Genova 1 0 0 1

Spero di essere stato il più chiaro possibile

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao
Per quanto riguarda il raggruppamento dei record, dovrebbe essere una cosa del genere
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
(non l'ho provato ... ma dovrebbe portarti sulla strada giusta)

Per quanto riguarda le presenze precedenti .... la vedo più semplice gestita da codice.

trinity Profilo | Guru

le query con una leggere modifica funziona e ti ringrazio era anche facile ammazza quanto sono stato sbadato forse ho così tanti impicci per la testa a livello lavorativo che non riesco neanche a scrivere del semplice codice.
Per il discorso delle presenze precedenti mi dicevi che è meglio gestire da codice. Per me qualsiasi cosa va benissimo purchè ottenga il risultato...dimmi cosa intendi e ppoi farmi vedere o darmi qualche dritta?

Ciao e grazie ancora
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ok. Dammi il tempo di ricreare lo scenario e provo a farti un progettino di esempio.
Tieni presente che, quello che ho in mente, fa comunque uso di LinqToDataset.

A stasera.
Ciao

trinity Profilo | Guru

Ok imparerò quello se è necessario ;)
calcola solo che ci possono anche stare presenze del giorno precedente di paese caricati settimane se non mesi prima.....se pensi che la tabella tabmovimenti sia strutturata male per quello che devo ricavare posso anche modificarla non ci sono problemi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao
Come promesso ti allego un progettino di esempio.
Ho trattato il Db Sql come se fosse un DataBase Access per avvicinarmi il più possibile alle tue esigenze .... altrimenti si sarebbe potuto usare anche LinqToSql.

Spero di aver interpretato bene la tua richiesta .... altrimenti .... facci sapere...
Ciao

trinity Profilo | Guru

Grazie per il tuo progetto, l'ho visto al volo perchè mi trovo fuori città ma ho notato che una cosa ossia io avendo installato sulla mia macchina solo sql server 2008 il file db non me lo apre se non c'è installato sql server 2005 o express....e se avvio il programma si apre la finestra senza darmi errori ma non mi appaiono i dati..
Possibile perchè la versione di sql server è diversa?

ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

trinity Profilo | Guru

Ciao,
senti nel progetto che mi hai passato quando scelgo i giorni da visualizzare ossia 10 febbraio o 12 non appare nulla in griglia, la variabile query non si popola....
Poi ho notato che l'apertura della form è lenta dipende dalla stringa di connessione oppure dalla programmazione in linq?

Forse manca l'open del database?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao e scusa se ieri non ti ho risposto ma sono stato fuori sede.
Ad ogni modo .... ti passo gli script di creazione delle tabelle .... non vorrei ci fossero problemi sul db che ti ho passato.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra



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