Newsgroup: it.comp.appl.access
Titolo: Query di unione query

Buonasera ai partecipanti, ho la necessità di unire tre query:
ho provato cosi come sotto riportato,
SELECT ALL [dData],[Presenze]
FROM [_AQ_Presenze_Per_Giorno]
UNION ALL SELECT [dData],[lCodicePrestazione],[totalePrezzi: 
lPrezzoPrestazione]
FROM [_AQ_Incasso_Per_Giorno]
UNION ALL SELECT [dDataspesa],[sDescrizioneSpesa],[sImportoSpesa]
FROM [_AQ_Spese_Per_Giorno]
ORDER BY [dData];
ma mi segnala questo errore.
Numero di colonne non corrispondente nelle due tabelle o query selezionate 
di una query di unione.
Grazie in anticipo Express 

 ha scritto nel messaggio
news:QoUDd.20963$_E5.5...@twister2.libero.it...

Ciao Express
prova così, ho aggiunto un campo fittizio alla prima query che aveva solo 2
campi mentre le altre ne  hanno 3
 SELECT [dData],[Presenze], 0 as Importo
 FROM [_AQ_Presenze_Per_Giorno]
 UNION ALL SELECT [dData],[lCodicePrestazione],[totalePrezzi:
 lPrezzoPrestazione]
 FROM [_AQ_Incasso_Per_Giorno]
 UNION ALL SELECT [dDataspesa],[sDescrizioneSpesa],[sImportoSpesa]
 FROM [_AQ_Spese_Per_Giorno]
 ORDER BY [dData];
Saluti
Cinzia

 ha scritto nel messaggio 
news:41e03f91$0$8203$5fc...@news.tiscali.it...

Grazie, ma non và!!
Mi chiede di:
Immettere valore parametro > Presenze
poi di nuovo
Immettere valore parametro > ICodicePrestazione
poi di nuovo
Immettere valore parametro > TotalePrezzo:
poi di nuovo
Immettere valore parametro > sImportoSpesa
e quindi mi restituisce una query con solo 3 campi
dData; Presenze; Importo
dove solo i record relativi a dData sono popolati, il resto è vuoto
Grazie, confido in tuo consiglio che ci conduca alla risoluzione.
Express


Ciao Express,
Se ti chiede di inserire quei dati è perchè non li trova nelle query da cui
gli dici di estrarli per cui sembrerebbe che nella query
[_AQ_Presenze_Per_Giorno] il campo Presenze non c'è oppure si chiama in un
altro modo, lo stesso dicasi per il campo lCodicePrestazione nella query
[_AQ_Incasso_Per_Giorno] e sImportoSpesa nella query _A_Q_Spese_Per_Giorno
Cerca di capire come si chiamano esattamente questi campi nelle query
indicate.
mi viene però un dubbio che tu voglia unire i risultati delle query non in
Verticale come fa la UNION ma in Orizzontale, vuoi cioè ottenere una query
che ti restituisca 9 campi in questo caso la query di unione non va bene
devi fare una normale select dalle tre query unendole sul campo data ....
Ciao
Cinzia

 Cinzia
Questi sono i nomi dei campi esatti, difatti avevo scritto (e me ne scuso) 
il nome delle etichette che mi restituiva la query.
SELECT ALL [dData],[lCodiceBarreCliente]
FROM [_AQ_Presenze_Per_Giorno]
UNION ALL SELECT 
[dData],[lCodicePrestazione],[totalePrezzi:lPrezzoPrestazione]
FROM [_AQ_Incasso_Per_Giorno]
UNION ALL SELECT [dDataspesa],[sDescrizioneSpesa],[sImportoSpesa]
FROM [_AQ_Spese_Per_Giorno]
ORDER BY [dData];
Ti allego, inoltre l'Sql delle query in oggetto
-----------------------------------------------------------------
_AQ_Presenze_Per_Giorno
-----------------------------------------------------------------
SELECT DISTINCTROW Tb_Prestazioni_Storiche.dData, 
Count(Tb_Presenze_Storiche.lCodiceBarreCliente) AS 
ConteggioDilCodiceBarreCliente
FROM Tb_Prestazioni_Storiche INNER JOIN Tb_Presenze_Storiche ON 
Tb_Prestazioni_Storiche.VisitaID = Tb_Presenze_Storiche.VisitaID
GROUP BY Tb_Prestazioni_Storiche.dData;
-----------------------------------------------------------------
_AQ_Incasso_Per_Giorno
-----------------------------------------------------------------
SELECT DISTINCTROW Tb_Prestazioni_Storiche.dData, 
Count(Tb_Prestazioni_Storiche.lCodicePrestazione) AS 
ConteggioDilCodicePrestazione, 
Sum(Tb_Prestazioni_Storiche.lPrezzoPrestazione) AS totalePrezzi
FROM Tb_Prestazioni_Storiche INNER JOIN Tb_Prestazioni ON 
Tb_Prestazioni_Storiche.lCodicePrestazione = 
Tb_Prestazioni.lCodiceBarrePrestazione
GROUP BY Tb_Prestazioni_Storiche.dData
ORDER BY Count(Tb_Prestazioni_Storiche.lCodicePrestazione) DESC;
-----------------------------------------------------------------
_AQ_Spese_Per_Giorno
-----------------------------------------------------------------
SELECT DISTINCTROW Tb_Spese_Dettagli.dDataSpesa, 
Tb_Spese_Dettagli.sDescrizioneSpesa, Sum(Tb_Spese_Dettagli.sImportoSpesa) AS 
SommaDisImportoSpesa
FROM Tb_Spese_Dettagli
GROUP BY Tb_Spese_Dettagli.dDataSpesa, Tb_Spese_Dettagli.sDescrizioneSpesa, 
Tb_Spese_Dettagli.CodSpesa
ORDER BY Tb_Spese_Dettagli.sDescrizioneSpesa DESC;
-----------------------------------------------------------------
Buona domenica e buon appetito
Express

 Express
Cinzia

>
Anche se correggo (o meno) quanto sopra segnalato FORM in FROM,
quando vado a salvare le modifiche della query, mi segnala
Errore di sintassi (operatore mancante) nell'espressione della query
[_AQ_Spese_Per_Giorno].SommaDisImportoSpesa
FORM [_AQ_Presenze_Per_Giorno] INNER JOIN [_AQ_Incasso_Per_Giorno]
[_AQ_Incasso_Per_Giorno]
 ON [_AQ_Presenze_Per_Giorno].dData = [_AQ_Incasso_Per_Giorno].dData
 INNER JOIN [_AQ_Spese_Per_Giorno] on  [_AQ_Presenze_Per_Giorno].dData =
Express 

 Express
Bene, usiamo Query Builder e facciamo prima:
Nuova Query
Selezioni le tre query  [_AQ_Presenze_Per_Giorno] , [_AQ_Incasso_Per_Giorno]
e [_AQ_Spese_Per_Giorno]
poi prendi dData dalla tabella presenze e la trascini su dData di Incasso,
prendi di nuovo dData di presenze e la trascini su Spese
adesso clicchi con il destro su ciascuna riga di collegamento selezioni
proprietà e tra le tre opzioni proposte selezioni la seconda.
Trascini poi i tuoi 9 campi dalle tabelle nella griglia sottostante e
dovremmo esserci...
Cinzia


Mi sa che ci stiamo avvicinando, perņ in questo modo,
se in una data non ho presenze, non mi risulta nemmeno
 il record delle spese, relativo a quella data.
Mi viene da pensare che, prendiamo ad esempio le spese,
se inserisco nella tabella anche la data dei giorni in cui non sostengo 
spese,
ed impostando il procedimento sulla query delle spese
(come prima suggerito da te)
avrei la restituzione di tutte le date del mese, e di conseguenza
anche per gli incassi e le presenze.
Ma certamente non č questo il modo di risolvere il problema.
Saluti Express 


Già era quello il problema che avevo cercato di spiegare!
L'unica soluzione che mi viene in mente è di ritornare alla query di UNION
mettendo dei campi fittizzi su ciascuna query in modo da ottenere sempre
otto campi
Prova a vedere cosa viene fuori così:
Attento ai nomi dei campi potrebbero non essere completamente corretti...
 SELECT [dData],[ConteggioDilCodiceBarreCliente],  ' ' as prestazione, 0 as
prezzoPrestazione, ' ' as DescrizioneSpesa, 0 as ImportoSpesa
 FROM [_AQ_Presenze_Per_Giorno]
 UNION ALL SELECT [dDataspesa], ' ' as ConteggioDilCodiceBarreCliente, ' '
as prestazione, 0 as prezzoPrestazione,
[sDescrizioneSpesa],[SommaDisImportoSpesa]   FROM [_AQ_Spese_Per_Giorno]
UNION ALL SELECT
[dData],' ' as ConteggioDilCodiceBarreCliente,
[ConteggioDilCodicePrestazione],[totalePrezzi], ' ' as DescrizioneSpesa, 0
as ImportoSpesa
FROM  [_AQ_Incasso_Per_Giorno]
ORDER BY [dData];
Ciao
Cinzia

 ha scritto nel messaggio 
news:41e253f9$0$10912$5fc...@news.tiscali.it...

Adeeso mi restituisce due-tre record per ogni data, vale a dire,
uno per le presenze, uno per le spese, uno per gli incassi
Express 


Bene, forse quasi ci siamo:
l'idea è questa: dalla query di unione ricaviamo tutte le date distinte che
ci interessano per cui potremmo rivedere la query di unione in modo tale da
ricavare solo le date:  diciamo che la chiamiamo  qry_tutteLeDate
SELECT [dData] FROM [_AQ_Presenze_Per_Giorno]
UNION  SELECT [dDataspesa] FROM [_AQ_Spese_Per_Giorno]
UNION SELECT [dData] FROM  [_AQ_Incasso_Per_Giorno]
ORDER BY [dData];
Adessso
Nuova query
Aggiungiamo  qry_tutteLeDate, [_AQ_Presenze_Per_Giorno] ,
[_AQ_Spese_Per_Giorno] e  [_AQ_Incasso_Per_Giorno]
Trasciniamo il campo dData da  qry_tutteLeDate, sul corrispondente campo
data delle altre tabelle,
tasto destro sui 3 collegamenti - Proprietà - 2a opzione
Trasciniamo i campi che ci interessano nella griglia...
Fammi sapere se ci siamo riusciti!
Cinzia


provo subito e ti faccio sapere
Express 

 Cinzia
GRANDE CINZIA!!!!
E' FATTA.
Saluti Express