Unire due query select

mercoledì 15 febbraio 2012 - 16.49

trinity Profilo | Guru

Ciao raga,
dovrei unire due query select con campi diversi di numero anche per poi andare a salvare il risultato in una tabella temporanea con cursori

mi spiego in pratica le due query divise sono le seguenti:

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

adesso ho creato questa tabella virtuale con cursore e gli ho messo la prima select all'interno:

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

come potete vedere nella tabella temp c'è una colonna che non è stata valorizzata ossia il campo presenze_prec che dovrebbe prendere il valore che viene generato dalla seconda select...

Come posso unire le due select?

le prove le sto facendo su sql server 2008 ma calcolate che la query dovrà girare su access 2010 non x mio volere

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

alx_81 Profilo | Guru

>Ciao raga,
>dovrei unire due query select con campi diversi di numero anche
>per poi andare a salvare il risultato in una tabella temporanea
>con cursori
ma perchè questo giro?
non so se l'altro post (quello della with) ti risolva o meno il problema.
Ma io qui creerei una temp con tutte le colonne che ti servono, riempiendola dapprima con la prima select.
Poi andrei in join con la seconda select per fare UPDATE FROM e aggiornare il campo prima rimasto a null.
Che ne pensi?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

trinity Profilo | Guru

Ci stavo pensando anche io lo eseguo per capire e posto il codice per solo una soluzione e semmai essere di aiuto ad altri. Si in teoria il codice della with dell'altro post va bene lo testo e ti faccio sapere ma vedendo il codice che mi hai postato sembra ok per la mia esigenza.

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

alx_81 Profilo | Guru

>Ci stavo pensando anche io lo eseguo per capire e posto il codice
>per solo una soluzione e semmai essere di aiuto ad altri. Si
>in teoria il codice della with dell'altro post va bene lo testo
>e ti faccio sapere ma vedendo il codice che mi hai postato sembra
>ok per la mia esigenza.
comunque, se da due resultset (che hai in lettura) vuoi ottenere un unico resultset che è l'append delle colonne devi pensare sempre a operatori di JOIN.
Se invece l'append lo devi fare delle righe, allora UNION.

Tu puoi sempre creare una tabellina popolata con una prima select più una costante (o un null) come ulteriore colonna (sapendo che poi la modificherai).
Una volta creata la tabella, basta farne l'update joinando con l'altro resultset e aggiornando solo il campo predisposto.

Anche questa non è una cattiva soluzione, e scala di più, in quanto le temp table di consentono di spezzettare i tuoi processi in transazioni molto meno pesanti su database (attenzione sempre che poi se lavori sulle temp, sei disconnesso e quindi i dati che hai letto una volta, potrebbero essere cambiati)
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

prassitele Profilo | Newbie

Ciao, Trinity.
Se non ho capito male, il tuo problema consiste nel riversare l'esito delle due query indicate in un'unica tabella (temporanea o in memoria), in modo da elaborare, poi, insieme i risultati.
Un'idea potrebbe essere questa:
Crea, anzitutto, una tabella (per esempio, in memoria), con il seguente script:

Declare @TbAppo as Table(codpaese int, Presenze_precedenti int, arrivi int, partiti int, presenze int)
(come ho visto che hai fatto, usando una tab temporanea, nel successivo frammento di codiche da te postato)

In seguito, riempirei la tabella senza usare cursori ma con due semplici select, in questo modo:

-- Prima Query --
Insert into @TbAppo
select codpaese,
0 as Presenze_precedenti,
COUNT(dataarrivo)as arrivi,
COUNT(datapartenza) as partiti,
(COUNT(dataarrivo)-COUNT(datapartenza))as presenze
from TABMOVIMENTI_1 with(nolock)
where dataarrivo='10/02/2012'
group by codpaese

-- Seconda Query --
Insert into @TbAppo
select codpaese,
COUNT(dataarrivo) as Presenze_precedenti,
0 as arrivi,
0 as partiti,
0 as presenze
from TABMOVIMENTI_1 With(nolock)
where datapartenza is null
group by codpaese

Spero di esserti stato utile.

Un saluto.

Prassitele

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